0

C# Windows ストア プロジェクトでキャッチされなかった例外をログに記録したいと考えています。

UI スレッドでコードを実行する場合は、Windows.UI.Xaml.Application.Current.UnhandledException イベントを使用できますが、トレッド プールで実行するコードからの例外はそのイベントをトリガーしません。

すべての「RunAsync」呼び出しが確実にラップされ、キャッチされていない例外がログに記録されるようにすることもできますが、誤ってそのソリューションを迂回してしまうのは非常に簡単です。すでに API に含まれているものはありますか?

4

3 に答える 3

1

利用できるものがあるかどうかはわかりませんが、RunAsyncのプラットフォームバージョンを使用して実行する前に、実行するアクションを実行してtry / catchブロックにラップする、独自のバージョンのRunAsyncを作成して作成を続けることができます。これがバックグラウンドで物事を実行するために使用する唯一の方法であることを確認してください。

それ以外の場合-すべての例外のブレークを有効にしてデバッグする(Alt + Ctrl + E、すべてチェック)と、問題のある領域を見つけるのに役立ちます。

于 2012-09-28T06:34:48.830 に答える
1

コードを Threadpoolthread として実行するようにスケジュールするにはどうすればよいですか? タスクを使用している場合は、TaskScheduler で UnobservedException イベントを確認してください。

System.Threading.Tasks.TaskScheduler.UnobservedTaskException +=new EventHandler<UnobservedTaskExceptionEventArgs>(...);
于 2012-09-28T06:40:18.940 に答える
0

この時点で認識している予期しない例外ハンドラーが 2 つあります。

  • System.Threading.Tasks.TaskScheduler.UnobservedTaskExceptionタスクがガベージ コレクションされる前にアクセスされない、タスクに格納された例外の場合。
  • Application.Current.UnhandledExceptionUI スレッドから伝播する例外の場合。

スレッドプールから伝播する例外をキャッチするものはまだ何も知りません。

于 2012-10-20T14:05:01.230 に答える