2

.NET Framework 3.5 の WinForms アプリケーションをデバッグしているときに、名前のない「ワーカー スレッド」を見つけました。

アプリケーションを開いたときに、デフォルトでワーカー スレッドが 1 つあることはわかっています。ただし、デバッグの途中でデバッガーを一時停止して「スレッド」ウィンドウを見ると、約 5 つ以上の同様のスレッド (優先度 = 通常) が表示されます。

アプリケーションによって開かれたすべてのスレッドには名前が付けられているため、少なくとも Thread.Start() を介してコードから開かれることはありません。

ダブルクリックしようとすると、VS.NET もコードを見つけることができません。

これらのスレッドは何ですか? それらは正常ですか、それとも一部の操作で何らかの形で空のスレッドが残されていますか?

それらはタイマーまたは同様の明白でないコントロールである可能性がありますか?関数はバックグラウンドで一時スレッドで動作しますか?

4

3 に答える 3

5

VS のスレッドと WinDbg のスレッドを比較したところ、VS はスレッド ウィンドウでスレッド プール スレッドを「ワーカー スレッド」とラベル付けしているようです。したがって、表示されているのは、BackgroundWorker、Timer、BeginInvoke、または同様のスレッド プール機能を使用したために開始されたスレッドであると想定します。

于 2009-08-30T17:00:28.387 に答える
0

Rusyo の投稿を続けると、これらのスレッドは、Visual Studio がプログラムをホストおよびデバッグする方法に関連している可能性があります (Visual Studio の外部からリリース ビルドを実行し、Process Explorer を使用して精査したことがありますか)。

明示的に VS ホスティングの一部ではない場合、それらはおそらく .NET スレッド プールに関連しており、タイマーや非同期メソッド呼び出しに使用されています。

于 2009-08-30T16:42:40.497 に答える
0

Windows がアプリケーションにスレッドを追加するポイントは、GetOpenFileName() (または ppen/save File ダイアログを発生させる他の関数) を呼び出すときです。

Windows はドライブ/フォルダのスキャンをバックグラウンドで実行し、ダイアログを閉じた後も明らかにスレッドを維持します。私はかなり前にこれを試してみて見つけました。こういう点は他にもあるのではないでしょうか。

于 2009-08-31T15:44:48.290 に答える