我正在从事我公司的一个项目,他们在其中使用了 Dispatcher.Invoke()
在很多地方。如果我使用 BeginInvoke
而不是调用 Synchronisation
线程之间工作正常,但在 Invoke 的情况下,应用程序卡住,甚至不进入委托(delegate)方法的执行。有人知道为什么会这样吗?
任何答案将不胜感激。
Invoke
的示例代码在项目中使用:
Dispatcher.Invoke(DispatcherPriority.Send,
new DelegateMethod(MethodtoExecute));
private delegate void DelegateMethod();
void MethodtoExecute()
{
try
{
}
catch (Exception /*ex*/)
{
}
finally
{
}
}
最佳答案
Dispatcher.Invoke
在与您的应用程序相同的线程上同步执行,因此无论您调用什么都能够阻塞主应用程序线程。 Dispatcher.BeginInvoke
异步执行,因此在执行时不会占用主应用程序线程。
由于您正在使用 DispatcherPriority.Send
,这是最高的调度程序优先级,无论您调用什么,都会先于其他任何事情运行,包括渲染屏幕或监听事件。我建议将其切换为 DispatcherPriority.Background
,它的运行优先级低于 Render 和 Input。参见 this page DispatcherPriority
级别及其执行顺序的列表
我强烈建议您查看发布的答案 here
关于c# - Dispatcher.Invoke() 不适用于该应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594879/