4

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

private DispatcherTimer _Timer = new DispatcherTimer();

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

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

4

1 回答 1

6

这是意料之中的。您的 _DoLoop 在与 UI 相同的线程上执行。

来自DispatcherTimer 类MSDN

如果在 WPF 应用程序中使用 System.Timers.Timer,则值得注意的是 System.Timers.Timer 运行在与用户界面 (UI) 线程不同的线程上。为了访问用户界面 (UI) 线程上的对象,有必要使用 Invoke 或 BeginInvoke 将操作发布到用户界面 (UI) 线程的 Dispatcher。使用 DispatcherTimer 而不是 System.Timers.Timer 的原因是 DispatcherTimer 与 Dispatcher 在同一线程上运行,并且可以在 DispatcherTimer 上设置 DispatcherPriority。

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

于 2010-04-16T11:58:55.840 回答