Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

I want to catch events in my main form and change the title to match the input from the event. I'm getting errors about crossthreading. Can some one please help me get this small test program working?

 

Here is the whole code:

Public Class Form1

   Private WithEvents Worker As New WorkerClass

   Private Sub Worker_ProgressChanged(ByVal Progress As Integer) Handles Worker.ProgressChanged
       Me.Text = Progress
   End Sub

End Class

 

Public Class WorkerClass

   Public Event ProgressChanged(ByVal Progress As Integer)
   Private t As Threading.Thread

   Public Sub New()
       t = New Threading.Thread(AddressOf MainThread)
       t.Name = "BackgroundThread"
       t.IsBackground = True
       t.Start()
   End Sub

   Private Sub MainThread()
       Dim Progress As Integer = 0
       Do Until Progress = 10
           Threading.Thread.Sleep(1000)
           Progress += 1
           RaiseEvent ProgressChanged(Progress)
       Loop
   End Sub

End Class

Posted

You have to change the form text from the same thread that the form was created, which you can access in a function by using the Invoke method.

 

To verify whether you are in form's originating thread, you can use the Control.InvokeRequired property.

 

I would move the operations out of the event method first.

 

Private Sub Worker_ProgressChanged(ByVal Progress As Integer) Handles Worker.ProgressChanged
       ChangeTitle(Progress)
End Sub

Delegate Sub ChangeTitleDelegate(ByVal Title As String)

   Private Sub ChangeTitle(ByVal Title As String)
       If (InvokeRequired) Then
           Invoke(New ChangeTitleDelegate(AddressOf ChangeTitle), Title)
       Else
           Me.Text = Title
       End If
   End Sub

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...