Windows窗体中的Java invokeLater()等价物?

时间:2009-08-10 16:46:40

标签: .net winforms

我是Java Swing世界的Windows Forms新手。 Java的SwingUtilities.invokeLater()是否有任何等价物?或者,如何分派要在主Windows窗体事件线程上运行的任务?

我在单独的线程上使用同步API执行后台任务。在任务结束时,我想重新启用一些禁用的按钮。但是当我尝试这样做时,我得到一个异常(正确地说是这样),因为我正在非UI线程上修改UI。

如何将该操作排入主事件线程?我没有找到搜索网络和SO的答案,我猜是因为我没有以正确的方式提出问题。任何帮助表示赞赏 - 谢谢!

2 个答案:

答案 0 :(得分:13)

您可以使用Control.InvokeControl.BeginInvoke在 UI线程上执行委托。另一种方法是使用BackgroundWorker,它可以很好地包装所有这些 - 如果你只想在处理过程中做一件事并且在完成时做一件事,那么它很方便,但是如果你想在UI上执行任意操作,使用Invoke / BeginInvoke更灵活。

我有一个关于在threading tutorial中使用Invoke / BeginInvoke的页面。 (它不包括BackgroundWorker,我很害怕。)

您可能还想查看Joe Albahari's threading tutorial

答案 1 :(得分:2)

您是否查看了BackgroundWorker