如何处理WPF应用程序实例化期间引发的异常?

如何处理WPF应用程序实例化期间引发的异常?,wpf,exception-handling,constructor,caliburn,Wpf,Exception Handling,Constructor,Caliburn,我使用以下代码在WPF应用程序中显示未处理的异常: public MyApplication() { this.DispatcherUnhandledException += (o, e) => { var exceptionMessage = new ExceptionWindow(); exceptionMessage.ExceptionMessage.Text = e.Exceptio

我使用以下代码在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();
            };
        }
事实证明,我在应用程序的实例化过程中遇到了一个异常,因此应用程序构造函数永远不会执行


复制它的一个简单方法(有一个不同的例外)是引入一个额外的“好的。我通过执行以下操作解决了这个问题:

  • App.xaml
    文件的
    Build操作
    ApplicationDefinition
    更改为
    页面

  • 创建一个新类,如下所示:


它用这个方法替换了生成的App.g.cs Main方法,因此我们有机会捕获异常。

只是出于好奇-为什么要捕获异常?由于您的程序无效,您永远无法优雅地处理它。我真正的问题是FirebirdSql.Data.FirebirdClient.dll中由于未命中而出现异常我已经解决了这个问题,但不容易识别异常,因为它不会发生在开发人员的机器上。我只想确保在没有提供足够的异常详细信息的情况下不会以这种方式抛出其他异常。

    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);
            }
        }
    }