2016-05-17 19 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

我認爲你需要證明你是如何調用FillListView –

+0

如果count_row> 0,則 如果ds_xml.Tables(0).Rows(0).Item(上下文0)的ToString <> 「」 然後 昏暗lengthSize爲整數= ListView1.Size.Width/3 - 2 ListView1.Clear() FillListView(ListView1的,lengthSize,ds_xml) 結束如果 ListView1.Items(ListView1.Items .Count - 1).EnsureVisible() End If THis path? – 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

嗨史蒂文,如果lstbox.InvokeRequired然後 lstbox.Invoke(Sub()FillListView(lstbox,colwidth,dset)) 退出子 結束如果問題:什麼表達式期望在Sub()? – kay2502

+0

啊,對。抱歉。你在.NET 2.0中,所以沒有lambda表達式。沒有lambda的話,你需要聲明一個與你的方法相匹配的自定義委託。我已經更新了我的回答來演示。 –

+0

史蒂文,嗨,我想問, 如何從.xml文件創建功能搜索。我想從.xml文件中的數據中搜索使用「likes」。 請幫忙.. 。 – kay2502

相關問題