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

Neb*_*ron 4 wpf timer freeze dispatcher

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

private DispatcherTimer _Timer = new DispatcherTimer();

_Timer.Tick += new EventHandler(_DoLoop);
_Timer.Interval = TimeSpan.FromMilliseconds(1500);
_Timer.Start();
Run Code Online (Sandbox Code Playgroud)

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

maj*_*cha 6

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

来自DispatcherTimer类 MSDN

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

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