Оба ваших вопроса, похоже, предполагают, что сворачивание вашего приложения каким-то образом остановит некоторые ваши потоки.Я не знаю, откуда у вас эта идея, но это совершенно неправильно.Ваш поток пользовательского интерфейса все еще работает, даже когда вы свернуты.Как еще она будет обрабатывать команду «восстановление», когда вы ее минимизируете?Как Windows сможет отображать свой заголовок на панели задач?
Вы также, кажется, думаете, что в WPF есть «нить диспетчера», которая каким-то особенным образом.Это не тот случай.Диспетчер занимает место в очереди сообщений Windows, что означает, что он подключен к потоку пользовательского интерфейса.То, что вы называете «потоком диспетчера», - это то же самое, что и , что и поток пользовательского интерфейса.Если вы используете WinForms и WPF в одном приложении, они оба работают в одном и том же потоке пользовательского интерфейса (если вы не запускаете новые потоки вручную и не запускаете на них собственных диспетчеров, но это довольно необычный сценарий).
И нет, ваш таймер не перестает работать только потому, что ваше приложение свернуто (если вы не написали код вручную, чтобы остановить его).Попробуйте: добавьте вызов к Console.Beep()
в своем событии отметки времени, а затем попробуйте свести к минимуму ваше приложение и убедитесь, что оно продолжает шуметь.
Вот мое предположение: в событии Tick вашего таймера ваши WinFormsприложение вызывает Invalidate ().Когда приложение свернуто, Invalidate ничего не делает - окно не отображается, поэтому нечего делать недействительным - поэтому вы видите низкую загрузку ЦП, потому что она ничего не делает.
Если вы хотите такое же поведение вWPF, лучше всего добавить этот код в начало вашего тика:
if (WindowState == WindowState.Minimized)
return;