我创建了一个新的WPF应用程序,并为MainWindow中的Loaded事件添加了一个事件处理程序:
Loaded += (s, e) => { throw new Exception("AAAA!"); };
Run Code Online (Sandbox Code Playgroud)
然后我从Visual C#启动此应用程序,应用程序不会崩溃也不显示未捕获的异常.
我希望它会崩溃,这个应用程序确实在其他计算机上崩溃了.但为什么它适用于我的?
更新
添加了截图:
要捕获异常,您需要在Loaded方法中执行try/catch,或者可以告诉Dispatcher在发生未处理的异常时通知您.
尝试以下操作,例如在应用程序的OnStartup方法中:
App.Current.DispatcherUnhandledException += (s,e) =>
{
// Handle the exception here
var ex = e.Exception;
};
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您希望应用程序崩溃,请尝试以下操作:
App.Current.DispatcherUnhandledException += (s,e) =>
{
// this should cause your application to crash :-)
throw new Exception("Now it should crash!", e.Exception);
};
Run Code Online (Sandbox Code Playgroud)
这里的不同之处在于我们创建了一个在UI线程上抛出的新异常.
Loaded 事件可能是从后台线程调用的。当该线程中抛出异常时,它将被终止,但不会影响您的主应用程序线程。这种行为可以在许多事件处理程序中看到,例如 Timer_Elapsed 事件处理程序通常也不会影响您的代码。这并不意味着您不应该关心此类代码中的异常!