Link to home
Start Free TrialLog in
Avatar of Tharo_Systems
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

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of crazyman
crazyman
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Tharo_Systems
Tharo_Systems

ASKER

I knew it had to be something simple! Thanks so much!