2016-05-17 8 views
-1

上に作成されたスレッド以外のスレッドからアクセスコーディングを変換するために私を助けてください...2.0での使用は、私が有効でないエラー、クロススレッド操作を得た:コントロール「ListView1のは、」それは

Public Sub FillListView(ByVal lstbox As ListView, ByVal colwidth As Integer, ByVal dset As DataSet) 
    Dim c As DataColumn 
    For Each c In dset.Tables(0).Columns 
     Dim h As New ColumnHeader 
     h.Text = c.ColumnName 
     h.Width = colwidth 
     ' lstbox.Invoke(
     lstbox.Columns.Add(h) ''Problem here 
     ') 
    Next 

    Dim dt As DataTable = dset.Tables(0) 
    Dim str(dset.Tables(0).Columns.Count) As String 

    Dim rr As DataRow 
    For Each rr In dt.Rows 
     For col As Integer = 0 To dset.Tables(0).Columns.Count - 1 
      str(col) = rr(col).ToString() 
     Next 
     Dim ii As New ListViewItem(str) 
     lstbox.Items.Add(ii) ''Problem here 
    Next 
End Sub 
+0

私はあなたがcount_row> 0の場合、あなたがFillListView –

+0

を呼び出しているかのコンテキストを表示する必要があると思うその後 はds_xml.Tables場合は(0).Rows(0).Item( 0).ToString <> "" 次に 暗いlengthSizeとして整数= ListView1.Size.Width/3から2 ListView1.Clear() FillListView(ListView1の、lengthSize、ds_xml) END IF ListView1.Items(ListView1.Items .Count - 1).EnsureVisible() 終了このパスの場合は? – kay2502

答えて

0

おそらく、UIスレッド以外のスレッドから呼び出す必要があります。これを修正するには、UIスレッドを呼び出す必要があります。ここではあなたがそれを行うことができ一つの方法です:

Public Delegate Sub FillListView(ByVal lstbox As ListView, ByVal colwidth As Integer, ByVal dset As DataSet) 

Public Sub FillListView(ByVal lstbox As ListView, ByVal colwidth As Integer, ByVal dset As DataSet) 

    ' Invoke back to the UI thread, if necessary 
    If lstbox.InvokeRequired Then 
     lstbox.Invoke(New FillListViewDelegate(AddressOf FillListView), listbox, colWidth, dset)) 
     Exit Sub 
    End If 

    Dim c As DataColumn 
    For Each c In dset.Tables(0).Columns 
     Dim h As New ColumnHeader 
     h.Text = c.ColumnName 
     h.Width = colwidth 
     lstbox.Columns.Add(h) 
    Next 

    Dim dt As DataTable = dset.Tables(0) 
    Dim str(dset.Tables(0).Columns.Count) As String 

    Dim rr As DataRow 
    For Each rr In dt.Rows 
     For col As Integer = 0 To dset.Tables(0).Columns.Count - 1 
      str(col) = rr(col).ToString() 
     Next 
     Dim ii As New ListViewItem(str) 
     lstbox.Items.Add(ii) 
    Next 
End Sub 
+0

こんにちはsteven、If lstbox.InvokeRequired Then lstbox.Invoke(Sub()FillListView(lstbox、colwidth、dset) Exit Sub End質問:Sub()で期待される式は? – kay2502

+0

ああ、そうです。ごめんなさい。あなたは.NET 2.0になっているので、ラムダはありません。ラムダがなければ、あなたのメソッドに合ったカスタムデリゲートを宣言する必要があります。デモのために私の答えを更新しました。 –

+0

steven、こんにちは、質問したい、 .xmlファイルから関数検索を作成する方法。 .xmlファイルのデータから「好き」を使用して検索したい 助けてください。 。 – kay2502

関連する問題