我有这个类,我有一个循环,从同一个类启动多个线程。这一切都是从主表格中完成的。
现在我想从这些类更新main上的richtextbox。
我已经尝试过那些begininvokes等等没有任何效果,没有错误但也没有输出。
这里是启动线程的代码:
Private PingObjects(100000) As Account 'Account is the class and login is the sub in it...
PingObjects(I) = New Account
Threads(I) = New Threading.Thread(AddressOf PingObjects(I).login)
Threads(I).IsBackground = True
Threads(I).Start()
要更新rtb,我使用MainForm.log.text =“.....” 什么都没发生,没有错误。 我也尝试过使用begin invoker方法。
答案 0 :(得分:1)
当然,
应该使用Control.Invoke()从不同于主UI线程的线程更新控件
我已经把东西放在一起让你尝试
' at the form level
Private Delegate Sub UpdateRTB(ByVal Msg As String)
' your thread function
Private Sub Login()
Dim Data As String = "your message for the RTB"
rtb.Invoke(New UpdateRTB(AddressOf MainForm.UpdateRTBMessage), Data)
End Sub
' the UI updater.
Private Sub UpdateRTBMessage(ByVal msg as String)
rtb.Text = msg
End Sub
我假设您的RichTextBox名为rtb
答案 1 :(得分:0)
找到了解决方案!!
我在另一个论坛上找到了解决方案:在facebook上的facebookdoom
Delegate Sub AppenLogDelegate(ByVal update As String)
Public Sub AppendLog(ByVal update As String) Implements Interface1.AppendLog
If log.InvokeRequired Then
log.Invoke(New AppenLogDelegate(AddressOf AppendLog), update)
Else
log.AppendText(update & vbCrLf)
End If
End Sub
在mainform中
制作新的界面类: -
公共接口Interface1 Sub AppendLog(ByVal update As String) 结束界面
把它放在线程类中:
Private ReadOnly _form As Interface1
Public Sub New(ByVal form As Form) _form = form 结束子
用法: -
_form.AppendLog( “AAAAAA”)