0

System.ComponentModel.Componentを継承するクラスがあります。コンポーネントは、外部イベントを待機する長いブロッキング呼び出しを行うbacgroundスレッドを生成します。私のDisposeでは、スレッドは呼び出しを終了して戻るように通知されます。アプリが常にDisposeを呼び出すことを確認できますか?スレッドが長引いてクライアントアプリが終了しないようにするにはどうすればよいですか?

4

2 に答える 2

2

スレッドが長引いてクライアントアプリが終了しないようにするにはどうすればよいですか?

を介しThread.IsBackgroundてスレッドをバックグラウンドスレッドにします。これにより、スレッドがプロセスを存続させないようにします。

于 2012-09-21T19:28:18.010 に答える
1

IDisposable.Disposeオブジェクトで呼び出されることを保証する方法はありません。通常の場合、ファイナライザーが呼び出されることが期待できます。

Disposeは単なる慣例であり、要件ではないため、適切なコーディングプラクティスを通じて強制し、ファイナライザーで実行時チェックを実行する必要があります(必要な場合)。

アプリをブロックしない良い方法は、長い同期呼び出しを行わないことです。ほとんどのAPIには非同期バージョンがあり、完了部分をキャンセル/無視するのがはるかに簡単です。できない場合は、ReedCopseyが提案したようにThread.IsBackgroundを使用してください。

于 2012-09-21T19:33:49.637 に答える