2010-04-16 59 views
4

我有一个小问题使用WPF调度定时器。在每个计时器上打勾我的应用程序冻结片刻(直到计时器滴答法完成)。这是我的代码:WPF调度计时器嘀嗒我的应用程序

private DispatcherTimer _Timer = new DispatcherTimer(); 

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

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

回答

6

这是预期的。你的_DoLoop和UI在同一个线程上执行。

DispatcherTimer Class MSDN

如果System.Timers.Timer以 WPF应用程序使用时,值得注意的是 ,该System.Timers.Timer上的 不同的线程,则用户 运行界面(UI)线程。为了 访问用户界面 (UI)线程上的对象,必须使用 Invoke或BeginInvoke将 操作发布到 用户界面(UI)线程的分派器上。 原因 使用而不是一个 System.Timers.Timer一个DispatcherTimer是在 DispatcherTimer运行在相同的 线程的调度和 的DispatcherPriority可以在 DispatcherTimer进行设置。

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

+0

在其他线程上运行它意味着如果不调用UI的调度程序,我将无法更改它的UI? – 2010-04-16 12:03:33

+0

“为了访问用户界面(UI)线程上的对象,必须使用Invoke或BeginInvoke将操作发布到用户界面(UI)线程的分派器上。” – majocha 2010-04-16 12:17:56

+0

如果您不想使用DispatcherPriority进行多线程实验,并将您的任务分解为单独计划的较小方法,也可以提供帮助。 – majocha 2010-04-16 12:40:24

相关问题