我的WPF应用程序中有一个DispatcherTimer
,它每200毫秒更新一次应用程序中的文本。该程序显示一系列计数器,时钟和计时器。
private DispatcherTimer dispatch = new DispatcherTimer();
public Timer()
{
InitializeComponent();
this.dispatch.Interval = TimeSpan.FromMilliseconds(200);
this.dispatch.Tick += new EventHandler(updateTimer);
}
private void updateTimer(object sender, EventArgs e)
{
loadingImage.RenderTransform = new RotateTransform(counter * 36);
counter++;
try
{
clock.Text = DateTime.Now.ToString(@clockFormat.Text);
}
catch (Exception) { }
try
{
watch.Text = watchCounter.Elapsed.ToString(@watchFormat.Text);
}
catch (Exception) { }
}
我遇到的问题是,只要DispatcherTimer
正在运行,就会导致"口吃"在我的申请中。就好像每次运行事件处理程序一样,程序有点滞后。有没有办法摆脱这种滞后?
答案 0 :(得分:0)
快速搜索指向RotateTransform可能是罪魁祸首。请参阅此答案https://stackoverflow.com/a/8766252/166333,其中提到了流程级别的阻止。那里也有一些可能适合你的答案。
答案 1 :(得分:0)
计时器不会导致延迟。你的代码呢。您正在UI线程上创建渲染加载。优化绘图,以便快速重绘您正在动画的元素。
此外,最好使用动画而不是计时器。
另请注意,计时器可能会出现时间偏差。诸如计数器计数器之类的增量计算本质上是不稳定的。在应用程序启动时记下,并从过去的时间开始计算计数器值。