我有两个关于WPF Dispatcher Thread的问题。
答案 0 :(得分:2)
你的问题似乎都假设最小化你的应用程序会以某种方式阻止你的一些线程。我不知道你在哪里有这个想法,但这是完全错误的。即使您已最小化,您的UI线程仍在运行。当你取消最小化它时,它还会如何处理“恢复”命令? Windows如何能够在任务栏上显示其标题?
你似乎也认为WPF有一个“调度程序线程”,它有些特殊。事实并非如此。 Dispatcher取代了Windows消息队列,这意味着它附加到UI线程。你称之为“调度程序线程”的东西与UI线程的相同的东西。如果你在同一个应用程序中运行WinForms和WPF,它们都运行在同一个UI线程上(除非你手动启动新线程并在它们上启动自己的调度程序,但这是一个非常不寻常的情况)。
不,你的Timer不会因为你的应用程序被最小化而停止运行(除非你手动编写代码来阻止它)。试一试:在您的计时器刻度事件中添加对Console.Beep()
的调用,然后尝试最小化您的应用,并亲自查看是否一直发出噪音。
这是我的猜测:在你的计时器的Tick事件中,你的WinForms应用程序调用Invalidate()。当应用程序最小化时,Invalidate不执行任何操作 - 窗口未显示,因此没有任何内容可以使其无效 - 因此您看到CPU使用率较低,因为它没有执行任何操作。
如果您想在WPF中使用相同的行为,最好将此代码添加到Tick事件的开头:
if (WindowState == WindowState.Minimized)
return;