Skip to content

Instantly share code, notes, and snippets.

@yoshikazuendo
Last active October 27, 2017 05:40
Show Gist options
  • Save yoshikazuendo/f06b46c00f16b138c18537655e5b97c4 to your computer and use it in GitHub Desktop.
Save yoshikazuendo/f06b46c00f16b138c18537655e5b97c4 to your computer and use it in GitHub Desktop.
WPFにて例外をまとめてトラップする方法 http://www.atmarkit.co.jp/ait/articles/1512/16/news026.html
// WPFのUIスレッドで発生した未処理例外をまとめてハンドリングする
public App()
{
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
}
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
MessageBoxResult result = MessageBox.Show("例外発生", "エラー", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if(result == MessageBoxResult.Yes)
{
// 例外を処理済みにできる。
e.Handled = true;
}
}
// 全ての未処理例外を最後にまとめてハンドリングする
// 但し、イベントハンドラーを抜けた時点でプログラムは終了する。
public App()
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var exception = e.ExceptionObject as Exception;
if (exception == null)
{
MessageBox.Show("System.Exceptionとして扱えない例外");
return;
}
string errorMember = exception.TargetSite.Name;
string errorMessage = exception.Message;
string message = string.Format(@"例外が{0}で発生。プログラムは終了します。エラーメッセージ:{1}", errorMember, errorMessag);
MessageBox.Show(message, "UnhandledException", MessageBoxButton.OK, MessageBoxImage.Stop);
Environment.Exit(0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment