11

編集

この質問への回答は、助けてくれてありがとう:)しかし、私は次のものを使用することになりまし


元の質問:

アプリケーションがクラッシュしたときにエラー メッセージを表示したいと考えています。

現在私は持っています:

App.xaml:

<Application x:Class="WpfApplication5.App"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      DispatcherUnhandledException="App_DispatcherUnhandledException"  // <----------------
      StartupUri="MainWindow.xaml">
    <Application.Resources>             
    </Application.Resources>
</Application>

の分離コードApp.xaml:

namespace WpfApplication5
{        
    public partial class App : Application
    {
        private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show("Caught Unhandled Exception!");
        }
    }
}

メインスレッドでエラーが発生した場合、このソリューションはうまく機能します。今私の問題は、別のスレッドでも発生するエラーをどのようにキャッチできるかということです。

つまり、このボタンを押すと、例外をキャッチすることができます: (App_DispatcherUnhandledExceptionが呼び出されます!)

    private void button1_Click(object sender, RoutedEventArgs e)
    {            
        int.Parse("lkjdsf");
    }

しかし、私はこの例外をキャッチできません:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Task.Factory.StartNew(() =>
        {
            int.Parse("lkjdsf");
        });
    }

メインスレッドで発生するかどうかに関係なく、すべての例外をキャッチするにはどうすればよいですか?

4

2 に答える 2

11

AppDomain.UnhandledExceptionHandlerを使用して、キャッチされていない例外を処理できます。

于 2013-03-20T14:56:17.247 に答える
2

AppDomain.UnhandledExceptionイベントを使用して、この例外をキャッチします。この例外をmessageBoxに表示できるようにするには、ディスパッチャーを使用する必要があります(これは、UIスレッドのみがメッセージを表示できるためです)

于 2013-03-20T14:59:36.007 に答える