3

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

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

4

4 回答 4

3

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

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

于 2012-10-19T15:50:14.533 回答
2

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

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

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

IntPtr ignored = control.Handle;

在 UI 线程上将实现这一点。

于 2012-10-19T15:54:11.223 回答
1

Control.Invoke方法。

来自 MSDN:“在拥有控件的基础窗口句柄的线程上执行指定的委托。”

于 2012-10-19T15:49:50.507 回答
1

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

于 2012-10-19T15:50:00.560 回答