c# - BeginInvoke回调函数

标签 c# .net winforms multithreading .net-4.0

我有一个 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/

相关文章:

c# - 一或零到多,代码优先

c# - 使类不被继承

c# - 进程无法访问文件 'CustomTabsClient_CustomTabsCallbackImpl.class'

.net - WinForm CRUD App 的 UI 设计,有什么作用?

c# - 在 PropertiesGrid 中将自定义对象列表显示为下拉列表

C#:如何将文本和二进制数据的组合写入文件?

c# - 在 Fluent NHibernate 自动映射中自引用多对多关系自动映射到 1 :n and not n:n

c# - Roslyn 是编译时表达式检查的正确工具吗?

c# - .NET 中 AJAX 和 ViewState 的行为不一致

c# - PictureBox 分配的 ErrorImage 在错误地处理其图像后未显示