【发布时间】:2012-05-31 11:38:47
【问题描述】:
我有这个类,我有一个循环从同一个类启动多个线程。这一切都是从主窗体完成的。
现在我想从这些类更新 main 上的富文本框。
我已经尝试了这些 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 调用方法。
【问题讨论】:
-
你能显示 PingObjects.Login 的代码吗? (顺便说一句,我真的希望你不打算同时启动100000个线程)
-
我已经把它写在那里了 -.- 无论如何,再次: MainForm.log.text = "....." 。好吧,100000 只是我提出的一些数字.. 那些甚至可能不会推出 1 %.. 但这不是问题!
-
您没有显示足够的代码。您的
PingObjects(I)建议使用 for 循环,但您没有显示它。您说您使用了“begininvokes”,但没有显示。显然你的login()方法的全部内容是MainForm.log.text = ".....",它不使用Control.Invoke(或BeginInvoke),因此不会更新你的UI。所以拜托,发布更多代码。 -
这是目前唯一的代码,所以我只发布了它,我所说的调用是指那些在其他线程上发布在 stackoverflow 上并获得 10++ 票的代码。我假设你知道那个代码。下面的那个也不行。
-
如果您尝试从后台线程修改控件,.NET 4 将引发异常。这意味着您要么吞噬异常,要么甚至不更新登录方法中的控件。您必须提供更多代码。
标签: .net vb.net multithreading richtextbox