2010-07-16 73 views
0

只是有一个有趣的问题,由以下的事件序列中的WPF问题后恢复:从WPF的OnRender覆盖叫怎样的OnRender

  • 代码抛出异常(有没有什么神秘之本 - 这是在一些视图模型代码中的一个微不足道的错误)

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

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

看来WPF采取暴力异常(!),以尝试的的OnRender执行过程中打开一个新的窗口,以及各种不好的事情发生,从第二Win32Exception由内WPF深一CreateWindowEx被抛出,以如果我们尝试并在我们的异常处理程序中执行类似MessageBox.Show的操作时,应用程序立即终止,当我们检测到双重异常时。

我没有今天这种情况处理的特殊问题,但有一个普遍的问题:

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

回答

0

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

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

+0

嗯。我会看看,但我不认为OnRender是通过与主U/I不同的线程调用的。我认为这个帖子可能更接近标准,但除了'不这样做'之外,它不提供任何建议:http://blogs.msdn.com/b/nickkramer/archive/2006/05/06/ 591252.aspx – 2010-07-16 21:44:22