首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DispatcherTimer的毫秒间隔

DispatcherTimer的毫秒间隔
EN

Stack Overflow用户
提问于 2015-06-02 03:33:14
回答 3查看 13.3K关注 0票数 3

我在C#中使用DispatcherTimer调用一个空:

代码语言:javascript
复制
        counter = new System.Windows.Threading.DispatcherTimer();
        counter.Tick += new EventHandler(counter_Tick);
        counter.Interval = new TimeSpan(0, 0, 1);
        counter.Start();

然而,我希望间隔是几毫秒,TimeSpan的参数是小时、分钟、秒,并且只接受整数(据我所知)。有没有针对DispatcherTimer的变通办法?我尝试过计时器,但我不能使用它(显然缺少引用)

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-02 03:40:14

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

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

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

票数 7
EN

Stack Overflow用户

发布于 2015-06-02 13:25:01

另一种方式

代码语言:javascript
复制
  counter.Interval = TimeSpan.FromMilliseconds(1);
票数 9
EN

Stack Overflow用户

发布于 2016-09-09 23:00:55

虽然@EBrown的答案已经告诉你如何在DispatcherTimer中使用毫秒,但它的精度应该在15-20毫秒左右,而且每次迭代的误差都会累积起来,这使得它有点不切实际。

但是,可以通过在启动DispatcherTimer的同时启动System.Diagnostics.StopWatch并使用较小的时间步长检查Tick事件内的StopWatch.ElapsedMilliseconds来解决此问题,这样似乎可以提供更精确的结果。它也可以与System.Timers.Timer一起使用。

下面是一个基于我编写的WPF程序的简短示例。

代码语言:javascript
复制
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事件时重新启动。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30581756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档