由于以下一系列事件引起了一个有趣的问题:
从WPF OnRender覆盖调用的代码抛出一个异常(这里面没有任何谜 - 这是一些视图模型代码中的一个微不足道的错误)
异常未处理,因此被DispatcherUnhandledException处理程序接收。
DispatchedUnhandledException处理程序尝试打开WPF窗口以显示异常,允许报告等。窗口打开失败,抛出另一个异常(来自我们的全局异常处理程序),终止应用程序。
似乎WPF在OnRender执行期间尝试打开一个新窗口时会遇到暴力异常(!),并且会发生各种不良事件,从WPF内部的CreateWindowEx抛出的第二个Win32Exception到应用程序立即终止如果我们在检测到双重异常时尝试在我们的异常处理程序中执行类似MessageBox.Show的操作。
我今天处理这种情况没有任何特殊问题,但有一个普遍的问题:
有没有办法从OnRender处理程序中恢复WPF状态,以便普通的WPF活动可以继续?我尝试在OnRender中捕获异常并在重新抛出之前调用dc.Close(),但这似乎没有任何区别。我想我应该寻找一个'WpfState.Reset()'调用或类似的东西。
答案 0 :(得分:0)
您是否有可能尝试在另一个线程中打开Window而不是主UI线程?这会导致异常。尝试使用Dispatcher在主线程中打开窗口(如果尚未打开)。
据我所知 - 渲染发生在辅助线程中,以防止阻塞UI线程。