1

アドインがアンロードされ、OnDisconnection() メソッドが実行されたら、アドインによって生成されたすべてのスレッドをすぐに終了させたいと思います。より具体的には、これらのスレッドの 1 つまたはメイン スレッドが MessageBox などを作成した場合、アドインがアンロードされた瞬間にメッセージ ボックスが破棄されるようにします。

私が今見ている動作は、アドインをアンロードすると ([ツール] -> [アドインの管理]) スレッドがバックグラウンドで実行され続け、ユーザーが手動で閉じるまでアドイン関連の UI が見えたままになることです。

4

2 に答える 2

2

何よりもまず、

アドインによって生成されたすべてのスレッドをすぐに終了させたい。

いいえ、あなたはしません。あなたが望むのは、他のスレッドが通常の方法で実行を停止することです。非同期例外 ( などThreadAbortException) は、アプリケーションを悪い状態のままにする可能性が高く、これは達成しようとしているものとは正反対です。

アドインに複数のスレッドがある具体的な理由がわからないので、次の提案しかできません。

  • アドインでフラグを設定するか、なんらかのキャンセル コールバックを呼び出して、実行時間の長い操作をキャンセルできることを確認してください。
  • アイドル状態のスレッドを実行したままにしないでください (作業が完了すると、スレッドのメイン関数が返され、スレッドの実行が停止します)。
  • アドインを停止できない場合は、次回 Visual Studio を再起動したときに変更が適用されることをユーザーに通知できます。メソッドは、おそらくこのIVsUIShell.ShowMessageBox通知に使用するものです。
  • 以前に使用したことはありませんがIVsThreadedWaitDialogFactory、Visual Studio シェルによって提供される は、この分野のいくつかの問題に対処するために作成されたようです。
于 2013-03-22T13:28:21.480 に答える
1

役立つリソース: C#、Visual Studio 2010、メソッド、スレッドを停止する方法は?

方法: スレッドの作成と終了

最初のリンクに記載されているように、BackgroundWorkerを調べることをお勧めします

于 2013-03-22T13:26:43.837 に答える