是否有与Android的runOnUiThread等效的C#/ Windows Forms?

时间:2012-10-19 15:46:15

标签: c# winforms multithreading

是否有与Android runOnUiThread等效的C#/ Windows窗体?

例如,假设我在工作线程上运行(长时间运行)任务,最后我想将结果发布到GUI控件(当然我不能从工作线程执行)。是否有一个像runOnUiThread这样简单的函数可以让我发布刷新显示以供UI线程处理?

4 个答案:

答案 0 :(得分:3)

WinForms中的每个控件都继承了InvokeBeginInvoke方法。

Invoke将同步运行委托,而BeginInvoke将异步运行委托。

答案 1 :(得分:1)

查看Control.Invoke方法。

从MSDN:“在拥有控件的底层窗口句柄的线程上执行指定的委托。”

答案 2 :(得分:1)

如果您有权访问winforms控件或表单,只需在该控件或表单上调用Control.InvokeControl.BeginInvoke即可。

答案 3 :(得分:1)

执行此操作的典型方法是使用System.Windows.Forms.Control:

control.BeginInvoke((MethodInvoker)delegate { ... });

但是,控件的句柄必须已在UI线程上初始化。一个简单的

IntPtr ignored = control.Handle;
UI线程上的

将实现这一点。