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!
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/BeginInvoketo 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.