2013-06-20 44 views
0

我試圖將項目添加到Form2中的Listbox,但注意不能添加,當我把Listbox放在同一個窗體中,線程的效果是好的......有人可以幫忙使其與Form2一起工作?這裏是代碼:如何與Form2中的ListBox交互通過Form1中的線程

Public Class Form1 
    Dim testthread As Threading.Thread 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Control.CheckForIllegalCrossThreadCalls = False 
     testthread = New Threading.Thread(AddressOf testira) 
     testthread.Start() 
    End Sub 
    Sub testira() 
     Form2.ListBox1.Items.Add(TextBox1.Text) 
    End Sub 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     Form2.Show() 
    End Sub 
End Class 
+0

'Control.CheckForIllegalCrossThreadCalls = FALSE'是一個壞主意。使用'Invoke'修復你的錯誤,以便在UI線程上進行UI改變操作;不要隱藏它們。 – Ryan

+0

你能告訴我這個例子如何解決它嗎? – Vladimir

回答

0

下面是一個例子...

Public Class Form1 

    Private f2 As New Form2 
    Private Delegate Sub AddItemDelegate(ByVal item As String) 
    Private Delegate Function GetTextboxTextDelegate(ByVal TB As TextBox) As String 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim testthread As New Threading.Thread(AddressOf testira) 
     testthread.Start() 
    End Sub 

    Sub testira() 
     Dim item As String = GetTextboxText(TextBox1) 
     AddItem(item) 
    End Sub 

    Private Function GetTextboxText(ByVal TB As TextBox) As String 
     If TB.InvokeRequired Then 
      Return TB.Invoke(New GetTextboxTextDelegate(AddressOf GetTextboxText), New Object() {TB}) 
     Else 
      Return TB.Text 
     End If 
    End Function 

    Private Sub AddItem(ByVal item As String) 
     If Me.InvokeRequired Then 
      Me.Invoke(New AddItemDelegate(AddressOf AddItem), New Object() {item}) 
     Else 
      If IsNothing(f2) OrElse f2.IsDisposed Then 
       f2 = New Form2 
      End If 
      f2.ListBox1.Items.Add(item) 
     End If 
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     If IsNothing(f2) OrElse f2.IsDisposed Then 
      f2 = New Form2 
     End If 
     f2.Show() 
    End Sub 

End Class