アプリケーションが正常/異常に閉じているときに、セカンダリスレッド(長時間実行プロセス)でメソッドを実行する必要があるという要件があります。セカンダリスレッドのメソッドの処理量の情報を保存する必要があります。
したがって、次のアプリケーションが開始するときは、停止した時点からセカンダリ スレッドのメソッドを開始する必要があります。
質問:
- どうすればそれを達成できますか?
- アプリケーションがシャットダウンしようとしていることをスレッドに知らせる方法は?
アプリケーションが正常/異常に閉じているときに、セカンダリスレッド(長時間実行プロセス)でメソッドを実行する必要があるという要件があります。セカンダリスレッドのメソッドの処理量の情報を保存する必要があります。
したがって、次のアプリケーションが開始するときは、停止した時点からセカンダリ スレッドのメソッドを開始する必要があります。
質問:
最善の方法は、セカンダリ スレッドの進行状況を定期的に (ディスクに...) 保存し、アプリケーション (およびスレッド) が再起動されたときに最後に保存したポイントから再開することだと思います。
他のすべての方法は、私にはwoodooのように思え、実装とデバッグが難しいでしょう.
セカンダリ スレッドでは、技術的にAppDomain.ProcessExitおよびAppDomain.UnhandledExceptionイベントに関連付けることができます。
ただし、これらのイベントはどちらもラスト チャンス タイプのイベントであり、いくつかの注意事項があります。イベントを使用する前に、各イベントに関する MSDN ドキュメントをよく読んでください。
あなたの問題は を使用する候補のようですBackgroundWorker
。進行状況とキャンセルの通知を提供します。例については、 BackgroundWorkerのドキュメントを参照してください。
アプリケーションのシャットダウンを開始または検出したらCancelAsync
、バックグラウンド ワーカー インスタンスを呼び出すことができます。イベントのハンドラー内でBackgroundWorker.DoWork
、イベント引数を定期的に調べて、キャンセルが要求されているかどうかを確認できます。