Ok, so it looks like your trying to invoke a delegate on form1 from a different form in your project, and when I tested THAT (as opposed to a thread started from form1), I had the same problem you did.
You need to make a refrence to form1 available to the background thread (or from form2). This is how I got it to work (calling a delegate on form1 from form2) in my quick test app:
Try this:
Public Delegate Sub UpdateListInvoker(ByVal whatToWrite As String)
Public UpdateListBox As UpdateListInvoker
Public Sub ListBoxUpdater(ByVal WhatToWrite As String)
If Me.InvokeRequired Then
Me.Invoke(UpdateListBox, WhatToWrite)
Else
Me.ListBox2.Items.Add(WhatToWrite)
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
UpdateListBox = AddressOf ListBoxUpdater
Form2.f1 = Me
Form2.Show()
End Sub
Public f1 As Form1
Private Sub bgThread()
f1.UpdateListBox("what you're adding to the listbox")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As New Threading.Thread(AddressOf bgThread)
t.Start()
End Sub
You see that in form2, I'm starting a background thread when I click a button, and then from the background thread I'm updating a listbox on form1 by using it's reference (f1).
This should do the trick for you.
-Pete