Ответ 1
Во-первых, это не 19.
При запуске "Hello, World!" WPF, я вижу 10 потоков в диспетчере задач. При запуске одного и того же приложения с помощью отладчика Visual Studio он использует 19. Итак, во-первых, из 9 из них добавлены как служебные данные из отладчика.
Теперь для 10.
Согласно статье MSDN Magazine, названной "Создайте более отзывчивые приложения с Диспетчером" , WPF запускается с двумя потоками:
Все приложения WPF начинаются с два важных потока, один для рендеринга и один для управления пользовательским интерфейсом. Поток рендеринга это скрытый поток, который выполняется в фон, поэтому единственная нить, которая вы обычно имеете дело с пользовательским интерфейсом нить.
Но согласно этой статье, во всех управляемых приложениях WPF есть много основных потоков:
Существуют различные типы .NET. потоки: финализатор, GC, отладчик, таймер, поток, первичный и фоновые потоки. Но не все связаны потоки, связанные с .NET.
Начиная с два из WPF, добавьте GC и финализатор, чтобы получить четыре. Добавьте в поток отладчика (все управляемые приложения имеют один, даже если не отладки), чтобы добраться до пять. Добавьте таймер в шесть.
И, присоединяя отладчик к моему приложению WPF после запуска его вне VS, я вижу, что в пуле потоков есть два рабочих потока. Это, вероятно, минимум. Это получает мое приложение до восемь.
Есть два, которые я точно не могу объяснить, но они скорее COM-потоки для interop (они определенно не управляются потоками). вторая статья, на которую я ссылался, обсуждает их больше.
Но настоящая мораль истории здесь, не беспокойтесь о них. Если ваниль "Привет, мир!" Приложение использует 10, то есть ваш базовый уровень. Остерегайтесь только тех потоков, которые вы создаете за пределами этого минимума.