アプリのプラグイン システムを設計しています。
UI に「開始」ボタンがあります。ユーザーがそれをクリックすると、アプリはプラグイン dll のメソッドを非同期的に呼び出し、「開始」を「停止」に変更する必要があります。そのメソッドには、プラグインの場合と同様に、ほとんどすべてを含めることができます。ユーザーが「停止」をクリックすると、その非同期メソッドはすぐに終了する必要があります。
使いたかったのThread.Abort();
ですが、誰もが使用しないことをお勧めします。CancellationTokenSource を使用する場合、すべてのプラグインにキャンセル処理を追加する必要がありますが、私はこれを行いたくありません。
PCの強制シャットダウン、プラグの抜き取り、または破棄(必要な場合!)のようなものが必要です。私にとって唯一重要なことは、すぐに停止することです。アプリは使用後にプラグインをアンロードし、プラグインはメインのアプリ コードとは関係がないため、クリーンアップなどは必要ありません。
メソッドを非同期的に開始し、それを完全に制御する方法はありませんか? この状況で使用Thread.Abort();
しても問題ありませんか (dll がスレッド アボート例外をキャッチしないことが保証されている場合)。
編集:メソッドの実行中にプラグイン dll (クラス) のキャンセル トークンを積極的に監視し、要求されたときにメソッドを強制終了する方法はありますか?
EDIT2:それは良い考えではないと思いますが、新しいプロセスを作成して使用するのはProcess.kill()
どうですか?