开发者

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_Erro开发者_如何学Cr(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/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.


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜