2014-11-02 164 views
0

我正在使用BackgroundWorker,我需要使用委託函數來查看是否檢查ListViewItem或不,但我不斷收到交叉線程錯誤。這一定是我編寫它的方式。任何幫助?VB.NET委託函數返回布爾值

Dim delListViewItemChecked As ListViewItemCheckedDelegate = AddressOf ListViewItemChecked 
    delListViewItemChecked.Invoke(ListViewPhotos, 0) 

Private Delegate Function ListViewItemCheckedDelegate(ByVal listView As ListView, ByVal index As Integer) As Boolean 

Private Function ListViewItemChecked(ByVal listView As ListView, ByVal index As Integer) As Boolean 
    If listView.Items(index).Checked = True Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 
+1

可能重複[?如何更新從C#另一個線程的GUI(http://stackoverflow.com/questions/661561/how-更新-gui-from-another-thread-in-c) – 2014-11-02 15:29:58

+0

它不是重複的。 vb.net和C#是不同的語言。 – xpda 2014-11-03 17:12:44

回答

0

試試這個:

  1. 沒有通過的ListView作爲參數傳遞給ListViewItemCheckedDelegate。
  2. 在後臺工作者的DoWork處理程序中聲明新的委託實例。

此示例似乎工作確定:

Private Delegate Function ListViewItemCheckedDelegate(ByVal index As Integer) As Boolean 

Private Function ListViewItemChecked(ByVal index As Integer) As Boolean 
Return ListView1.Visible 
End Function 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
bkg1.RunWorkerAsync() 
End Sub 

Private Sub bkg1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bkg1.DoWork 
Dim delListViewItemChecked As New ListViewItemCheckedDelegate(AddressOf ListViewItemChecked) 
MsgBox(Me.Invoke(delListViewItemChecked, 3)) ' arbitrary 3 
End Sub