3

私は、開発マシンよりも本番マシンでランダムに発生する奇妙なWPFマルチスレッドアプリケーションのハングを調査しています。

アプリケーションがシステムシェルであるためにクラッシュしないようにするために、Application.Dispatcher.UnhandledExceptionおよびCurrentDomain.UnhandledExceptionイベントハンドラーを追加して、すべての例外をログに記録しました。

ハングの理由は、これらのイベントを処理していて、アプリケーションのクラッシュを許可していないためだと思います。これは、Windowsタスクマネージャーを使用してハングしたときにアプリケーションのアクティビティを監視したときに、CPUの負荷が原因である可能性があることに気付いたためです。アプリケーションのバックグラウンドタスクとそれらのバックグラウンドタスクは、期待どおりにログに書き込んでいます。

ロガークラスは、BeginInvokeを使用して非同期的にログをディスクに書き込みます。

大きな問題は、アプリケーションが本番マシンでハングするたびに、ログファイルに何も見つからないことです。

今私は2つの質問があります:

  1. これらのイベントの発生順序は何ですか:「Application.Dispatcher.UnhandledExceptionおよびCurrentDomain.UnhandledException」。

2.とにかく、コードが失敗したかどうかを知ることができますか?

:スレッドを自分で管理しているため、バックグラウンドタスクで多くのThread.Sleepを使用しています。このアプローチはうまくいかなかったと思います。また、すべてのバックグラウンドタスクを最初から書き直すことを検討しています。

どんな助けでも大歓迎です。

4

1 に答える 1

2

このイベントの順序は次のとおりです。

  1. Application.DispatcherUnhandledException
  2. CurrentDomain.UnhandledException

コードが失敗している例外から情報を取得したい場合は、プロパティStackTraceを確認してください。プロジェクトのpdbファイルに添付することもできます。この場合、行番号付きのStackTraceを取得します。

于 2012-11-24T20:38:34.570 に答える