需要WPF页面中Dispatcher.PushFrame样式进程阻塞的帮助吗
我使用Dispatcher.PushFrame阻止代码,同时允许UI刷新,直到长时间运行的进程完成。只要我对Dispatcher.PushFrame的调用是通过按钮单击事件进行的,这就可以正常工作。但是,如果我在页面的加载事件或构造函数期间使用相同的代码,UI不会刷新,因此不会绘制。作为一个随机实验,我尝试从构造函数中使用Window.ShowDialog,它确实允许UI绘制,即使控件在模式对话框关闭之前被阻止。是否有人能提供一种解决方案,使用Dispatcher.PushFrame或其他手动机制从页面加载事件中允许此功能需要WPF页面中Dispatcher.PushFrame样式进程阻塞的帮助吗,wpf,Wpf,我使用Dispatcher.PushFrame阻止代码,同时允许UI刷新,直到长时间运行的进程完成。只要我对Dispatcher.PushFrame的调用是通过按钮单击事件进行的,这就可以正常工作。但是,如果我在页面的加载事件或构造函数期间使用相同的代码,UI不会刷新,因此不会绘制。作为一个随机实验,我尝试从构造函数中使用Window.ShowDialog,它确实允许UI绘制,即使控件在模式对话框关闭之前被阻止。是否有人能提供一种解决方案,使用Dispatcher.PushFrame或其他手动机
作为补充,如果我最小化或最大化我的窗口,UI会绘制,我可以正常与它交互,但直到我手动执行调整大小。从我在MSDN上的读数和在Reflector中的摸索中,似乎加载的
和卸载的事件不会以与其他事件相同的方式引发。内部使用BroadcastEventHelper
类,该类在可视化树中的每个元素之间协调各种Loaded
事件,然后最终在DispatcherPriority.Loaded
级别提升它们
我相信这就是你看到这种行为的原因
至于具体的解决方案,我建议不要将长时间运行的任务放在页面中。加载事件处理程序,而是发布BackgroundWorker
或Task
来完成这项工作。如果有人关心的话,下面还有一些关于这个问题的背景信息。(甚至在那里标记为已回答…@user598946,您的问题在MSDN论坛中得到了回答。这个答案中有什么你不清楚的地方吗?