「C Sharpの基礎 - マルチスレッド」の版間の差分

ナビゲーションに移動 検索に移動
316行目: 316行目:
       Debug.WriteLine(ex.GetType());
       Debug.WriteLine(ex.GetType());
     }
     }
}
catch (Exception ex)
{  // 未処理の例外をキャッチ
    Trace.WriteLine($"Log: {ex}");
}
catch
{  // SEHをキャッチ
    Trace.WriteLine("Log: Caught uninterpreted exception.");
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
328行目: 336行目:
  {
  {
     Debug.WriteLine(exception.ToString());
     Debug.WriteLine(exception.ToString());
}
catch (Exception ex)
{  // 未処理の例外をキャッチ
    Trace.WriteLine($"Log: {ex}");
}
catch
{  // SEHをキャッチ
    Trace.WriteLine("Log: Caught uninterpreted exception.");
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<code>Task</code>クラスで発生したキャッチされていない例外をまとめて処理する場合、<code>TaskScheduler.UnobservedTaskException</code>メソッドを使用する。<br>
<code>Task</code>クラスで発生したキャッチされていない例外をまとめて処理する場合、<code>TaskScheduler.UnobservedTaskException</code>メソッドを使用する。<br>
  <syntaxhighlight lang="c#">
<u>ただし、これは、例外が発生したタイミングでキャッチできないこと、および、例外をキャッチできたとしても対処可能なことが限られることに注意する。</u><br>
  TaskScheduler.UnobservedTaskException += (sender, e) =>
  <syntaxhighlight lang="cpp">
  private async void buttonl_Click(object sender, RoutedEventArgs e)
  {
  {
     AggregateException ae = e.Exception;
     await Task.Run(() =>
    Debug.WriteLine(ae.ToString());
    {
    e.SetObserved();  // .NET Framework 4.0の場合、これを記述しないとソフトウェアが強制終了する
      await Task.Delay(1000);
  };
    });
    // 非同期処理の未処理例外をキャッチする
    TaskScheduler.UnobservedTaskException += (sender, e) =>
    {
      AggregateException ae = e.Exception;
      Debug.WriteLine(ae.ToString());
      e.SetObserved();  // .NET Framework 4.0の場合、これを記述しないとソフトウェアが強制終了する
    };
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー