WPF Dispatcher计时器刻度冻结我的应用程序

时间:2010-04-16 11:27:56

标签: wpf timer dispatcher freeze

使用WPF Dispatcher Timer时遇到了一些问题。在每个计时器滴答我的应用程序冻结片刻(直到计时器滴答方法完成)。这是我的代码:

private DispatcherTimer _Timer = new DispatcherTimer();

_Timer.Tick += new EventHandler(_DoLoop);
_Timer.Interval = TimeSpan.FromMilliseconds(1500);
_Timer.Start();

有没有办法避免这种情况并让我的应用程序顺利运行?

1 个答案:

答案 0 :(得分:6)

这是预期的。你的_DoLoop在与UI相同的线程上执行。

来自DispatcherTimer Class MSDN

  

如果在。中使用System.Timers.Timer   WPF应用程序,值得注意   System.Timers.Timer在a上运行   不同的线程然后用户   接口(UI)线程。为了   访问用户界面上的对象   (UI)线程,有必要发布   对Dispatcher的操作   用户界面(UI)线程使用   Invoke或BeginInvoke。 原因   使用DispatcherTimer反对a   System.Timers.Timer是那个   DispatcherTimer运行相同   线程作为Dispatcher和a   可以在上面设置DispatcherPriority   DispatcherTimer

如果您需要执行耗时的计算,请在另一个线程上运行它以保持UI响应。