Пустые рабочие темы, что они?

При отладке.NET Framework 3.5, приложения WinForms я заметил несколько "рабочих потоков" без имени.

Я знаю, что когда вы открываете приложение, вы получаете один рабочий поток по умолчанию. Однако в середине отладки, когда я приостанавливаю отладчик и смотрю в окно "Потоки", я вижу около 5+ похожих потоков (приоритет = нормальный).

Все потоки, открытые приложением, получили имя, поэтому они не открываются из кода, по крайней мере, через Thread.Start()

Когда я пытаюсь сделать двойной щелчок, VS.NET также не может найти код.

Что это за темы? Они нормальные, или некоторые операции каким-то образом оставляют позади пустые потоки?

Могут ли они быть таймерами или аналогичными неочевидными элементами управления, функции работают с временными потоками в фоновом режиме?

3 ответа

Решение

Я только что сравнил потоки в VS с потоками в WinDbg, и оказалось, что VS помечает потоки пула потоков как "Рабочий поток" в окне потоков. Таким образом, я предполагаю, что вы видите потоки, запущенные из-за использования BackgroundWorker, Timer, BeginInvoke или подобных функций пула потоков.

Продолжая статью Rushyo, эти темы могут быть связаны с тем, как Visual Studio размещает и отлаживает вашу программу (пробовали ли вы запускать сборку релиза из-за пределов Visual Studio и использовать Process Explorer для проверки).

Если они явно не являются частью хостинга VS, они, вероятно, связаны с пулом потоков.NET, используемым для таймеров, асинхронных вызовов методов.

В момент, когда Windows добавляет потоки в ваше приложение, вы вызываете GetOpenFileName() (или другие функции, которые вызывают диалог ppen/save File.

Windows выполняет сканирование дисков / папок в фоновом режиме и, очевидно, сохраняет потоки живыми после закрытия диалога. Я только что узнал об этом через испытания довольно давно. Вероятно, есть больше точек, как это.

Другие вопросы по тегам