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

Tharo_SystemsAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

crazymanCommented:
change this

Sub ThreadLogging(ByVal entry As String) Handles oTwo.LogUpdated
        Invoke(New Logger(AddressOf updateList), entry)
            End Sub
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Tharo_SystemsAuthor Commented:
I knew it had to be something simple! Thanks so much!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.