Raf*_*mão 2 wpf constructor exception caliburn
我使用以下代码来显示 WPF 应用程序中未处理的异常:
public MyApplication() {
this.DispatcherUnhandledException += (o, e) => {
var exceptionMessage = new ExceptionWindow();
exceptionMessage.ExceptionMessage.Text = e.Exception.Message;
exceptionMessage.ExceptionCallStack.Text = e.Exception.StackTrace;
exceptionMessage.ExceptionInnerException.Text = e.Exception.InnerException.Message;
exceptionMessage.WindowStartupLocation = WindowStartupLocation.CenterScreen;
exceptionMessage.WindowStyle = WindowStyle.ToolWindow;
exceptionMessage.ShowDialog();
e.Handled = true;
Shell.Close();
};
}
Run Code Online (Sandbox Code Playgroud)
事实证明,我在应用程序实例化期间出现异常,因此应用程序构造函数永远不会执行。
重现它的一种简单方法(有不同的例外)是在应用程序配置文件中的某些标记之前引入额外的“<”并运行它。
在调用应用程序构造函数之前会出现类似这样的无用错误消息。 替代文本http://srtsolutions.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mikewoelmer/ExceptionWPF1_5F00_1C1F39AA.jpg
有谁知道如何捕获此类异常?
备注:我正在使用Caliburn,并且我的应用程序扩展了 CaliburnApplication。
好的。我通过执行以下操作解决了该问题:
Build Action将文件的名称App.xaml从更改ApplicationDefinition为Page.
创建一个新类,如下所示:
public class AppStartup {
[STAThread]
static public void Main(string[] args) {
try {
App app = new App();
app.InitializeComponent();
app.Run();
}
catch (Exception e) {
MessageBox.Show(e.Message + "\r\r" + e.StackTrace, "Application Exception", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它用这个方法替换了生成的 App.g.cs Main 方法,因此我们有机会捕获异常。