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 Actionます。App.xamlApplicationDefinitionPage

  • 次のような新しいクラスを作成します。


    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.csMainメソッドがこのメソッドに置き換えられるため、例外をキャッチする機会があります。

于 2010-01-26T12:31:00.963 に答える