SOL1102
SOL1102

Reputation: 512

Accessing Form1 Properties From Thread

I have an exceptionhandler function that basically just writes a line to a textbox on Form1. This works fine when being run normally but the second I use a thread to start a process it cannot access the property. No exception is thrown but no text is written to the textbox:

Public Sub ExceptionHandler(ByVal Description As String, Optional ByVal Message As String = Nothing)
    ' Add Error To Textbox
    If Message = Nothing Then
        Form1.txtErrLog.Text += Description & vbCrLf
        Log_Error(Description)
    Else
        Form1.txtErrLog.Text += Description & " - " & Message & vbCrLf
        Log_Error(Description, Message)
    End If
    MessageBox.Show("caught")
End Sub

Is it possible to access a form's properties from a thread this way or would it be easier to write to a text file or similar and refresh the textbox properties every 10 seconds or so (Don't see this as a good option but if it's the only way it will have to do!).

Also, still new to VB so if I have done anything that isn't good practice please let me know!

Upvotes: 0

Views: 214

Answers (2)

Delcon
Delcon

Reputation: 2555

You have to use delegates. Search for delegates in VB.

Here a peace of code that does the job.

 Delegate Sub SetTextCallback(ByVal text As String)

Public Sub display_message(ByVal tx As String)

'prüfen ob invoke nötig ist If Me.RichTextBox1.InvokeRequired Then Dim d As New SetTextCallback(AddressOf display_message) Me.Invoke(d, tx) Else tx.Trim() Me.RichTextBox1.Text = tx End If

End Sub

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1502816

No, you shouldn't access any GUI component properties from the "wrong" thread (i.e. any thread other than the one running that component's event pump). You can use Control.Invoke/BeginInvoke to execute a delegate on the right thread though.

There are lots of tutorials around this on the web - many will be written with examples in C#, but the underlying information is language-agnostic. See Joe Albahari's threading tutorial for example.

Upvotes: 2

Related Questions