2

我正在使用以下代码在 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();
            };
        }

原来我在应用程序的实例化过程中遇到了一个异常,所以应用程序构造函数永远不会执行。

重现它的一种简单方法(有一个不同的例外)是在应用程序的配置文件中的某个标记之前引入一个额外的“<”并运行它。

在调用应用程序构造函数之前会出现类似的无用错误消息。 替代文本 http://srtsolutions.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mikewoelmer/ExceptionWPF1_5F00_1C1F39AA.jpg

有谁知道如何捕捉这种异常?

备注:我正在使用Caliburn,我的应用程序扩展了 CaliburnApplication。

4

1 回答 1

4

好的。我通过执行以下操作解决了这个问题:

  • Build ActionApp.xaml文件的更改ApplicationDefinitionPage

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


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

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

于 2010-01-26T12:31:00.963 回答