Tharo_Systems
asked on
Using Delegates for Cross-thread operations
I need some help understanding the use of Delegates. I would like to have a listbox on the main form and be able to add to it from other threads. Below is some example code that I've been playing with but not very successfully. Can someone point out what I'm doing wrong? I keep getting "Cross-thread operation not valid". Thanks!
Public Class One
Private Delegate Sub Logger(ByVal _message As String)
Dim t As Threading.Thread
Dim WithEvents oTwo As New Two
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
t = New Threading.Thread(AddressOf oTwo.startCounting)
t.Start()
End Sub
Private Sub updateList(ByVal entry As String)
ListBox1.Items.Add(entry)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
t.Abort()
End Sub
Sub ThreadLogging(ByVal entry As String) Handles oTwo.LogUpdated
Invoke(New Logger(AddressOf updateList), entry)
Dim writer As Logger
writer = AddressOf updateList
writer.Invoke(entry)
End Sub
End Class
Public Class Two
Public Event LogUpdated(ByVal entry As String)
Public Sub startCounting()
Dim count As Integer = 0
While True
WriteMonitorLog(count.ToString)
count += 1
Threading.Thread.Sleep(100)
End While
End Sub
Private Sub WriteMonitorLog(ByVal entry As String)
RaiseEvent LogUpdated(entry)
End Sub
End Class
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER