DispatcherTimer causes program "Stutter"

本文关键字:quot Stutter causes program DispatcherTimer | 更新日期: 2023-09-27 18:29:38

我的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运行时,它都会导致我的应用程序出现"卡顿"。就好像每次运行事件处理程序时,程序都会有一点滞后。有没有办法摆脱这种滞后?

DispatcherTimer causes program "Stutter"

计时器不是造成延迟的原因。您的代码确实如此。您正在UI线程上创建渲染负载。优化绘图,以便设置动画的元素可以快速重新绘制。

此外,最好使用动画而不是计时器。

还要注意,计时器可能会在时间上发生偏移。诸如计数器之类的增量计算本质上是不稳定的。记下你的应用程序何时启动,并根据经过的时间计算计数器值。

快速搜索指出RotateTransform可能是罪魁祸首。查看此答案https://stackoverflow.com/a/8766252/166333其中提到了在进程级别的阻塞。这里也有一些答案可能对你有用。