DispatcherTimer导致程序" Stutter"

时间:2014-11-08 19:43:16

标签: c# wpf dispatchertimer

我的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正在运行,就会导致"口吃"在我的申请中。就好像每次运行事件处理程序一样,程序有点滞后。有没有办法摆脱这种滞后?

2 个答案:

答案 0 :(得分:0)

快速搜索指向RotateTransform可能是罪魁祸首。请参阅此答案https://stackoverflow.com/a/8766252/166333,其中提到了流程级别的阻止。那里也有一些可能适合你的答案。

答案 1 :(得分:0)

计时器不会导致延迟。你的代码呢。您正在UI线程上创建渲染加载。优化绘图,以便快速重绘您正在动画的元素。

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

另请注意,计时器可能会出现时间偏差。诸如计数器计数器之类的增量计算本质上是不稳定的。在应用程序启动时记下,并从过去的时间开始计算计数器值。