需要WPF页面中Dispatcher.PushFrame样式进程阻塞的帮助吗

需要WPF页面中Dispatcher.PushFrame样式进程阻塞的帮助吗,wpf,Wpf,我使用Dispatcher.PushFrame阻止代码,同时允许UI刷新,直到长时间运行的进程完成。只要我对Dispatcher.PushFrame的调用是通过按钮单击事件进行的,这就可以正常工作。但是,如果我在页面的加载事件或构造函数期间使用相同的代码,UI不会刷新,因此不会绘制。作为一个随机实验,我尝试从构造函数中使用Window.ShowDialog,它确实允许UI绘制,即使控件在模式对话框关闭之前被阻止。是否有人能提供一种解决方案,使用Dispatcher.PushFrame或其他手动机

我使用Dispatcher.PushFrame阻止代码,同时允许UI刷新,直到长时间运行的进程完成。只要我对Dispatcher.PushFrame的调用是通过按钮单击事件进行的,这就可以正常工作。但是,如果我在页面的加载事件或构造函数期间使用相同的代码,UI不会刷新,因此不会绘制。作为一个随机实验,我尝试从构造函数中使用Window.ShowDialog,它确实允许UI绘制,即使控件在模式对话框关闭之前被阻止。是否有人能提供一种解决方案,使用Dispatcher.PushFrame或其他手动机制从页面加载事件中允许此功能


作为补充,如果我最小化或最大化我的窗口,UI会绘制,我可以正常与它交互,但直到我手动执行调整大小。

从我在MSDN上的读数和在Reflector中的摸索中,似乎加载的
和卸载的
事件不会以与其他事件相同的方式引发。内部使用
BroadcastEventHelper
类,该类在可视化树中的每个元素之间协调各种
Loaded
事件,然后最终在
DispatcherPriority.Loaded
级别提升它们

我相信这就是你看到这种行为的原因


至于具体的解决方案,我建议不要将长时间运行的任务放在
页面中。加载
事件处理程序,而是发布
BackgroundWorker
Task
来完成这项工作。

如果有人关心的话,下面还有一些关于这个问题的背景信息。(甚至在那里标记为已回答…@user598946,您的问题在MSDN论坛中得到了回答。这个答案中有什么你不清楚的地方吗?