我有一个 c# .NET winforms 应用程序进行此异步调用:
simpleDelegate.BeginInvoke(null, null);
我的函数正在被委托(delegate)调用,一切都很好。问题是,函数在工作线程上完成后,我需要主线程来更新我的 winform 上的一些控件。如果工作线程尝试更新这些控件,.NET 就会崩溃。但我需要主线程保持对用户操作的响应,然后仅在工作线程完成调用异步函数后才调用我的函数 UpdateFormAfterServerCall() 。
如果您能给我一个简洁的代码示例,而不是抽象地解释如何做到这一点,我将不胜感激。我已经阅读了一百个解释,但我只是在正确地将它们连接在一起时遇到了麻烦。
注意:在 BeginInvoke 之前我有:
simpleDelegate = new MethodInvoker(CallServer);
最佳答案
从不同的线程,如果你想更新另一个线程拥有的 GUI,请使用 MethodInvoker
if(control.InvokeRequired)
control.Invoke( (MethodInvoker) ( ()=> updating_function() ) );
else
updating_function();
关于c# - BeginInvoke回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10950029/