Sha*_*ain 5 c# wpf multithreading delegates dispatcher
我正在开发我公司的一个项目,他们Dispatcher.Invoke()在很多地方使用。如果我使用BeginInvokeInvoke 而不是 Invoke,那么Synchronisation线程之间工作正常,但在 Invoke 的情况下,应用程序会冻结,甚至不进入委托方法的执行。有谁知道为什么会这样?
任何答案将不胜感激。
Invoke项目中使用的示例代码:
Dispatcher.Invoke(DispatcherPriority.Send,
new DelegateMethod(MethodtoExecute));
private delegate void DelegateMethod();
void MethodtoExecute()
{
try
{
}
catch (Exception /*ex*/)
{
}
finally
{
}
}
Run Code Online (Sandbox Code Playgroud)
Dispatcher.Invoke与您的应用程序在同一线程上同步执行,因此您调用的任何内容都能够阻塞主应用程序线程。Dispatcher.BeginInvoke异步执行,因此在执行时不会占用主应用程序线程。
由于您使用的DispatcherPriority.Send是最高调度程序优先级,因此您调用的任何内容都会先于其他内容运行,包括渲染屏幕或侦听事件。我建议将其切换为DispatcherPriority.Background,它的运行优先级低于渲染和输入。请参阅此页面以获取级别列表DispatcherPriority及其执行顺序
我强烈建议您查看此处发布的答案
| 归档时间: |
|
| 查看次数: |
11018 次 |
| 最近记录: |