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

标签 c# wpf multithreading delegates dispatcher

我正在从事我公司的一个项目,他们在其中使用了 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/

相关文章:

iOS线程调用

c# - 在客户端点击隐藏div

c# - xxx 实例的标识符从 y 更改为 z

WPF 绑定(bind)到 Entity Framework 不更新

c# - 为什么我可以在 Snoop 中看到 PasswordBox 的密码?

javascript - Node.js 集群 - 最佳 worker 数

c# - Bubblesort int 只返回 0

c# - 网络不好的情况下如何处理文件HttpClient.PostAsync文件上传?

WPF : Extend Theme's style - StackOverflowException

c++ - 在 C++ 中模态来自其他正在运行的线程的消息对话框