从工作线程调用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/

    10-11 04:04