DispatcherTimer的毫秒间隔

时间:2015-06-01 19:33:14

标签: c# timer windows-phone

我使用DispatcherTimer在C#中调用void:

        counter = new System.Windows.Threading.DispatcherTimer();
        counter.Tick += new EventHandler(counter_Tick);
        counter.Interval = new TimeSpan(0, 0, 1);
        counter.Start();

但是我希望间隔为几毫秒,TimeSpan的参数是小时,分钟,秒,只接受整数(据我所见)。 DispatcherTimer有解决方法吗?我已经尝试过Timer但我不能使用它(显然缺少参考)

提前致谢。

3 个答案:

答案 0 :(得分:8)

另一种方式

  counter.Interval = TimeSpan.FromMilliseconds(1);

答案 1 :(得分:5)

TimeSpan对象有一个构造函数,它以毫秒为参数:

MSDN有详细信息:https://msdn.microsoft.com/en-us/library/6c7z43tw(v=vs.110).aspx

基本上,将new TimeSpan(0, 0, 1)替换为new TimeSpan(0, 0, 0, 0, millisecondTimeout)

答案 2 :(得分:2)

尽管@ EBrown的答案已经告诉你如何使用毫秒DispatcherTimer,但它的精度大约是15-20毫秒,并且错误在每次迭代时加起来,这使得它有点不切实际的。

但是,可以通过在System.Diagnostics.StopWatch的同时启动DispatcherTimer并使用较小的时间步长检查Tick事件中的StopWatch.ElapsedMilliseconds来解决此问题,并且这似乎给出了更精确的结果。它也适用于System.Timers.Timer

这是一个基于我制作的WPF程序的简短示例。

private void StartTimers(object sender, RoutedEventArgs e)
{
    dtimer = new DispatcherTimer();
    dtimer.Tick += new EventHandler(dTimer_Tick);
    dtimer.Interval = TimeSpan.FromMilliseconds(1);  // the small time step

    stopWatch = new StopWatch();

    dTimer.Start();
    stopWatch.Start();
}

private void dTimer_Tick(object sender, EventArgs e)
{        
     currentTime = stopWatch.ElapsedMilliseconds;
        if (currentTime - oldTime > interval)
        {
            oldTime = currentTime;
            DoStuff();
        }
}   

在Tick事件中使用StopWatch.Restart进行迭代将导致DispatchTimer导致相同的错误问题,因为它会在DispatchTimer事件被触发时重新启动。