从工作线程调用UI线程已经讨论了很多次,我们知道为什么要使用BeginInvoke()而不是Invoke()。我最近发布了this question,在进行了一些研究之后,我发现至少有三种不同的方式(内部可能是相同的)来调用(异步)UI线程上的某些内容。
Control.BeginInvoke()
SynchronizatoinContext
类Dispatcher.BeginInvoke(priority.. )
谁能告诉我这是一种异步调用要在UI线程上执行的方法的可靠方法。有经验吗?我看到Dispatcher.BeginInvoke具有优先级组件,它使它更可靠吗?
上下文:
我们使用的是
someControl.BeginInvoke()
,但注意到有时(不幸的是,仅在最终用户生产环境中)传递给BeginInvoke is
的委托(delegate)从未执行,这使我相信它创建的帖子已丢失。我们希望有一种可靠的方法来与UI线程通信。 control.Invoke()
有时会挂起UI,所以我们也不想去那里。 最佳答案
它们都按照应有的方式运行,如果您调用BeginInvoke
有时却什么也没发生,则可能是环境或调用代码中存在一些问题-并不是BeginInvoke
不可靠。好吧-可能有一个错误,但是可能性很小。
也许您可以提供更多背景信息,我们可以帮助您进行诊断。
关于c# - control.BeginInvoke()Vs调度程序Vs SynchronizationContext Vs ..-可靠性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6332232/