WPF调度程序计时器勾号冻结我的应用程序

WPF调度程序计时器勾号冻结我的应用程序,wpf,timer,dispatcher,freeze,Wpf,Timer,Dispatcher,Freeze,我在使用WPF调度程序计时器时遇到了一个小问题。在每个计时器滴答声中,我的应用程序都会冻结一段时间(直到计时器滴答声方法完成)。这是我的代码: private DispatcherTimer _Timer = new DispatcherTimer(); _Timer.Tick += new EventHandler(_DoLoop); _Timer.Interval = TimeSpan.FromMilliseconds(1500); _Timer.Start(); 有没有办法避免这种情况

我在使用WPF调度程序计时器时遇到了一个小问题。在每个计时器滴答声中,我的应用程序都会冻结一段时间(直到计时器滴答声方法完成)。这是我的代码:

private DispatcherTimer _Timer = new DispatcherTimer();

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

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

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

来自MSDN

如果系统中使用System.Timers.Timer WPF应用程序,值得注意 System.Timers.Timer在 与用户不同的线程 接口(UI)线程。为了 访问用户界面上的对象 (UI)线程,有必要发布 对调度程序的操作 用户界面(UI)线程使用 唤起或开始唤起原因 使用与 System.Timers.Timer是 Dispatchermer在同一台计算机上运行 线程作为调度程序和 可以在上设置DispatcherPriority 调度员。


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

在其他线程上运行它意味着,如果不调用UI的dispatcher?”以访问用户界面(UI)上的对象,我将无法从中更改UI“如果你不想多线程试验DispatcherPriority并将你的任务分解成单独调度的较小方法,也会有所帮助。