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