私は、開発マシンよりも本番マシンでランダムに発生する奇妙なWPFマルチスレッドアプリケーションのハングを調査しています。
アプリケーションがシステムシェルであるためにクラッシュしないようにするために、Application.Dispatcher.UnhandledExceptionおよびCurrentDomain.UnhandledExceptionイベントハンドラーを追加して、すべての例外をログに記録しました。
ハングの理由は、これらのイベントを処理していて、アプリケーションのクラッシュを許可していないためだと思います。これは、Windowsタスクマネージャーを使用してハングしたときにアプリケーションのアクティビティを監視したときに、CPUの負荷が原因である可能性があることに気付いたためです。アプリケーションのバックグラウンドタスクとそれらのバックグラウンドタスクは、期待どおりにログに書き込んでいます。
ロガークラスは、BeginInvokeを使用して非同期的にログをディスクに書き込みます。
大きな問題は、アプリケーションが本番マシンでハングするたびに、ログファイルに何も見つからないことです。
今私は2つの質問があります:
- これらのイベントの発生順序は何ですか:「Application.Dispatcher.UnhandledExceptionおよびCurrentDomain.UnhandledException」。
2.とにかく、コードが失敗したかどうかを知ることができますか?
注:スレッドを自分で管理しているため、バックグラウンドタスクで多くのThread.Sleepを使用しています。このアプローチはうまくいかなかったと思います。また、すべてのバックグラウンドタスクを最初から書き直すことを検討しています。
どんな助けでも大歓迎です。