我已经搜寻了很多,但似乎找不到与我的特定问题有关的任何内容。
我希望能够从另一个类(SocketListener)更新MainUI表单,并且在其中有一个处理网络的线程(clientThread)。现在,我可以运行来自网络线程的简单输出,例如写入调试器输出和创建MessageBox。
但是我真正想做的是能够从clientThread调用代码,该代码将在MainUI实例上执行操作。我怎样才能做到这一点?
另外,如果有人想要代码的特定部分,那么我可以将其发布以帮助您更好地理解我的要求。
最好的祝福!
检查InvokeRequired中的Control类,并且如果这是真的,然后调用Invoke和传递,你想要给客户端的线程上做一个委托(通常是匿名方法)。
InvokeRequired
Control
Invoke
例:
public void DoWork(Form form) { if (form.InvokeRequired) { // We're on a thread other than the GUI thread form.Invoke(new MethodInvoker(() => DoWork(form))); return; } // Do what you need to do to the form here form.Text = "Foo"; }