如何在WPF OnRender出现问题后恢复

刚刚有一个有趣的问题,由以下一系列事件引起:

  • 从WPF OnRender覆盖中调用的代码抛出了一个异常(这里没有任何谜团 - 这在某些视图模型代码中是一个微不足道的错误)

  • 这个异常是未处理的,所以被我们的DispatcherUnhandledException处理程序拾取。

  • DispatchedUnhandledException处理程序试图打开一个WPF窗口来显示异常,允许报告等。窗口打开失败,抛出另一个异常(来自我们的全局异常处理程序),终止应用程序。

  • 看起来WPF在OnRender执行过程中尝试打开一个新窗口时会发生暴力异常(!),并且会发生各种不好的事情,从WPF中的CreateWindowEx深度抛出第二个Win32Exception到应用程序立即终止,如果我们尝试当我们检测到双重异常时,在我们的异常处理程序中执行像MessageBox.Show这样的东西。

    我今天在处理这种情况时没有任何特别的问题,但有一个普遍的问题:

    有没有办法从OnRender处理程序中恢复WPF状态,以便普通的WPF活动可以继续? 我试图在重新抛出它之前捕捉OnRender中的异常并调用dc.Close(),但这似乎没有任何区别。 我想我应该找一个'WpfState.Reset()'调用或类似的东西。


    是否有可能您尝试在另一个线程中打开窗口而不是主UI线程? 这会导致异常。 尝试使用Dispatcher在主线程中打开窗口,如果它尚未。

    据我记得 - 渲染发生在辅助线程,以防止阻塞UI线程。

    链接地址: http://www.djcxy.com/p/51227.html

    上一篇: How do I recover after problem in WPF OnRender

    下一篇: Why doesn't Mutex get released when disposed?