【发布时间】:2011-09-14 00:06:31
【问题描述】:
从工作线程调用 UI 线程被讨论过很多次,我们知道为什么要使用 BeginInvoke() 而不是 Invoke()。我最近发布了this question,在进行了一些研究后,我发现至少有三种不同的方式(在内部它们可能相同)在 UI 线程上调用(异步)某些东西。
Control.BeginInvoke()- 使用
SynchronizatoinContext类 - 使用
Dispatcher.BeginInvoke(priority.. )
谁能告诉我异步调用要在 UI 线程上执行的方法的可靠方法。有什么经验吗?我看到 Dispatcher.BeginInvoke 具有优先级组件,它是否使它更可靠?
上下文:
我们正在使用someControl.BeginInvoke(),但注意到有时(不幸的是仅在最终用户生产环境中)传递给BeginInvoke is 的委托从未执行过,这让我相信它创建的发布消息正在丢失。我们想要一种可靠的方式与 UI 线程进行通信。 control.Invoke() 有时会挂起 UI,所以我们也不想去那里。
【问题讨论】:
-
不要将 WinForms 与 WPF 混淆。
-
我遇到了类似的问题...您是否设法纠正了问题?
-
这里一样,有更新吗?