2

ここからアプリケーションを閉じると、アクティブなすべてのBackgroundWorkersが停止しますか?そうではないようです。

しかし、ここからフォームのクロージングイベントでBackgroundWorkerを停止する方法は?はいのようです。

それで、それはどれですか?

(編集:BackgroundWorkersが例外で終了する可能性があることを認識しています。しかし、それの問題は何ですか?リソースを消費する実行中のスレッドを残さないことがここでのポイントではありませんか?)

4

2 に答える 2

4

を閉じても、そのフォームによって開始されたすべてのバックグラウンド ワーカーが停止するFormわけではありません。

アプリケーション全体が終了すると、すべてのバックグラウンド スレッドが停止します。

メイン フォームを閉じると (別のMain処理を行うようにメソッドを変更していない限り)、アプリケーション全体が終了します。

あなたが参照した各質問は、それが言っていることに対して正しいです。メイン フォームを閉じると、アプリケーション全体が終了し、バックグラウンド ワーカーが自動的に閉じられます。閉じているフォームがメイン フォームではなく、他のフォームであり、それを開始するバックグラウンド ワーカーを停止したい場合は、自分で行う必要があります。

また、提供した2 番目のリンクがもう少し複雑なものを求めていることにも注意してください。その投稿では、フォームを閉じると (メイン フォームの場合)、バックグラウンド スレッドの実行が停止することは明らかです。OPがそこでやろうとしているのは、バックグラウンドスレッドに「やあ、終わりの時間だ、ここで終わった」と伝え、そのバックグラウンドスレッドが物事をきれいに片付け終えるまでフォームを待たせることです。何かをしている最中に、スレッドを終了して強制的に中止します。

于 2012-09-12T17:25:25.733 に答える
1

あなたが提供するこれらのリンクは両方とも正しい答えを持っています-BackgroundWorkerプログラムが閉じられると閉じられます。管理されていないリソースは、明示的に閉じることを心配する必要があるリソースです。

于 2012-09-12T17:13:49.143 に答える