我很好奇为什么在执行下面的代码时没有捕获到ExecutionEngineException。
try
{
((Window)window).Close();
}
catch (Exception e)
{
Console.WriteLine(e);
}
永远不会到达WriteLine。任何想法如何捕捉这个例外?
注意:我知道当其中一个DockablePanes处于AutoHide模式时,AvalonDock会抛出异常,可见并且用户正在尝试关闭wpf窗口。
更新: 我在msdn上阅读了有关此异常的remarks section:
CLR永远不会以托管代码可以捕获它的方式抛出此异常。
所以问题是如何在这样的事情之后很好地关闭应用程序。
答案 0 :(得分:2)
ExecutionEngineException
表示致命错误,您不应该尝试恢复或处理。你需要在问题发生之前解决这个问题,而不是试图优雅地处理问题。
由于您说您已经知道问题的根源,因此您应该采取措施防止应用程序达到强制抛出致命异常的状态。
答案 1 :(得分:0)
考虑将[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions()]
属性添加到执行代码的方法中。