Dispatcher.Invoke()不适用于该应用程序

时间:2011-09-29 09:01:20

标签: c# wpf multithreading delegates dispatcher

我正在处理我公司的一个项目,他们在许多地方使用Dispatcher.Invoke()。如果我使用BeginInvoke而不是Invoke,那么线程之间的Synchronisation工作正常但是调用应用程序的情况是冻结的,甚至也没有进入委托方法的执行。有没有人知道为什么会这样发生?

任何答案都将不胜感激。

项目中使用的Invoke示例代码:

Dispatcher.Invoke(DispatcherPriority.Send,
                  new DelegateMethod(MethodtoExecute));

private delegate void DelegateMethod();

 void MethodtoExecute()
        {
            try
            {

            }
            catch (Exception /*ex*/)
            {

            }
            finally
            {

            }
        }

1 个答案:

答案 0 :(得分:2)

Dispatcher.Invoke在与应用程序相同的线程上同步执行,因此无论你调用什么都能阻止主应用程序线程。 Dispatcher.BeginInvoke以异步方式执行,因此在执行时它不会占用主应用程序线程。

由于您使用的DispatcherPriority.Send是最高的调度程序优先级,因此您调用的任何内容都会先于其他任何内容运行,包括呈现屏幕或侦听事件。我建议将其切换到DispatcherPriority.Background,其运行的优先级低于渲染和输入。有关DispatcherPriority级别及其执行顺序

的列表,请参阅this page

我强烈建议您查看here

发布的答案