WPF:如果Loaded事件中发生异常,应用程序不会崩溃

时间:2011-05-09 10:32:18

标签: c# wpf exception

我创建了一个新的WPF应用程序,并为MainWindow中的Loaded事件添加了一个事件处理程序:

Loaded += (s, e) => { throw new Exception("AAAA!"); };

然后我从Visual C#启动此应用程序,应用程序不会崩溃也不显示未捕获的异常。

我希望它会崩溃,这个应用程序确实在其他计算机上崩溃了。但为什么它适用于我的?

更新 添加了屏幕截图:screenshot

2 个答案:

答案 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事件处理程序通常也不会影响您的代码。 这不是说你不应该关心这些代码中的异常!