C#Windows窗体应用程序 - 从另一个线程AND类更新GUI?

Luk*_* S. 8 .net c# multithreading winforms

我搜索了很多,但我似乎无法找到与我的具体问题有关的任何内容.

我希望能够从另一个类(SocketListener)更新我的MainUI表单,并且我有一个处理网络的线程(clientThread).现在我可以从网络线程运行简单的输出,例如写入调试器输出和创建MessageBox.

但我真正想做的是能够调用clientThread中的代码,该代码将在我的MainUI实例上执行操作.我怎样才能做到这一点?

此外,如果有人想要代码的特定部分,那么我可以发布它,以帮助您更好地理解我的要求.

最好的祝福!

小智 17

检查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";
}
Run Code Online (Sandbox Code Playgroud)