c# winform程序,DispatcherTimer被调用延迟,响应间隔长

c# winform程序,DispatcherTimer被调用延迟,响应间隔长

最近修改的问题,winform界面上两个控件的数据刷新,用DispatcherTimer定时刷新,但是在某些机器上的实际刷新时间间隔远远大于设置时间。

既然MSDN已经说了,不保证计时器在时间间隔发生时准确执行。
Timers are not guaranteed to execute exactly when the time interval occurs, but they are guaranteed to not execute before the time interval occurs. This is because DispatcherTimer operations are placed on the Dispatcher queue like other operations. When the DispatcherTimer operation executes is dependent on the other jobs in the queue and their priorities.

两个控件数据的刷新在程序不同层级,所以分别用了两个方法。

修改DispatcherTimer优先级

最简单的方法,在生成计时器对象时,加一个优先级参数。
private DispatcherTimer _timer = new DispatcherTimer(DispatcherPriority.Send);

用线程计时器

private System.Threading.Timer _timer;

_timer = new System.Threading.Timer(new TimerCallback(OnTimerTicked));

启动计时器,参数一指定调用之前的延迟时间,参数二指定计时器时间间隔
_timer.Change(0, 100);

private void OnSysTimeUpdatingTimerTicked(object state)
{
# 注意这里的写法。因为timer线程与UI不在同一个线程,timer线程不能直接调UI控件设置变量值。
mylabel.Invoke(new Action(() => { mylabel.Text = xxxxx; }));
}

如果需要关闭计时器,设置第一个参数为-1
_sysTimeUpdatingTimer.Change(-1,100);

你可能感兴趣的:(c#,开发语言)