使用WPF Dispatcher Timer时遇到了一些问题。在每个计时器滴答我的应用程序冻结片刻(直到计时器滴答方法完成)。这是我的代码:
private DispatcherTimer _Timer = new DispatcherTimer();
_Timer.Tick += new EventHandler(_DoLoop);
_Timer.Interval = TimeSpan.FromMilliseconds(1500);
_Timer.Start();
有没有办法避免这种情况并让我的应用程序顺利运行?
答案 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响应。