サードパーティのDLLを介して接続されたデバイスにアクセスするWindowsMobileプログラムがあります。デバイスへの各呼び出しには不明な時間がかかる可能性があるため、各呼び出しにはタイムアウトプロパティが含まれています。呼び出しが戻るのに指定されたタイムアウトよりも長くかかる場合、DLLは代わりに例外をスローし、アプリは問題なくキャッチします。
私が抱えている問題は、アプリケーションを閉じることです。アプリケーションがDLLを呼び出し、タイムアウトが発生するのを待っていて、タイムアウトが発生する前にアプリケーションを閉じると、アプリケーションがロックされ、PDAを再起動する必要があります。
通常の状態では、アプリケーションが閉じる前にタイムアウトを待機することを確認できます。ただし、AppDomain.CurrentDomain.UnhandledException
プログラムで未処理の例外をキャッチし、イベントを使用してこの保留中のタイムアウトが発生するのを待機し、プログラムを最終的に閉じることができるようにしようとしています。
私の問題は、このイベントが十分に長く続いていないように見えることです。イベントに行を入れてMessageBox.Show("unhandled exception");
、アプリケーションのメインフォームから新しい未処理の例外をスローすると、メッセージボックスが一瞬表示されますが、[OK]ボタンをクリックしないとメッセージボックスが消えます。
このイベントで私が見つけたドキュメントによると、アプリケーションが呼び出されるまでに、アプリケーションは完全にクローズにコミットされ、クローズを停止することはできませんが、イベントメソッド自体が終了しないという意味ではないと思いました。何が得られますか(それが問題だと思います)?
更新: フルウィンドウ(Vista)では、これは期待どおりに機能しApplication.ThreadException
ますが、.NetCF2.0には存在しないイベントを使用する場合に限ります。