我试图让我的 WPF 崩溃应用程序,并使用上述新的 .NET 4 属性捕获异常。
我设法通过调用 Environment.FailFast("crash");
手动使我的应用程序崩溃.
(我还设法使用来自“How to simulate a corrupt state exception in .NET 4?”的汉斯代码使其崩溃。)
当按下按钮时,应用程序调用上面的崩溃代码。
这是我的异常处理程序:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
DispatcherUnhandledException += app_DispatcherUnhandledException;
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void CurrentDomain_FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
//log..
}
[HandleProcessCorruptedStateExceptions]
void app_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//log..
}
//log...
上面显示的评论仅用于说明;那里有真正的日志代码。在 Visual Studio 中运行时,会引发异常,但不会“冒泡”到那些异常处理程序块。
当作为独立运行(没有附加调试器)时,我没有得到任何日志,尽管我期望。
为什么会这样,如何让处理代码被执行?
最佳答案
该属性必须放在包含 try/catch 的方法中,而不是放在事件处理程序中。
在我对 this question 的回答中提供了一个示例
关于.net - .NET 4 中的新 HandleProcessCorruptedStateExceptions 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2955460/