从同一个类的多个线程更新

时间:2012-05-31 11:38:48

标签: .net vb.net multithreading richtextbox

我有这个类,我有一个循环,从同一个类启动多个线程。这一切都是从主表格中完成的。

现在我想从这些类更新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方法。

2 个答案:

答案 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”)