背景计时器每秒,这是正确的方法吗?

Zer*_*ker 0 c# multithreading timer

我想每秒都来一个计时器.但我不想在UI线程上运行它,以防止冻结.

所以,我使用的是另一个计时器而不是Designer提供的内置计时器.而且我不确定这是否是正确的方法.

  threadtimer = new System.Threading.Timer(timer, null, 1000, Timeout.Infinite);
        private void timer(object obj)
        {
            dowork.....

            threadtimer.Change(1000, Timeout.Infinite);
        }
Run Code Online (Sandbox Code Playgroud)

它似乎是错的,我首先创建线程,并告诉它在1000之后运行,无限时间.而且我仍然需要复述它来永远这样做.如果它不成立,我为什么还要有第二个参数呢?

pax*_*blo 5

你不具备做这种方式.第三个参数(dueTime = 1000)是最初调用计时器之前的延迟,第四个参数(周期=无穷大)控制周期性,后续回调的频率,而不是生成回调的时间.

你拥有它的方式,在当前计时器结束和下一个计时器触发之间会有一秒钟的延迟.

如果你想让它发生的每一秒,你可以简单地为这两个论点提供了1000,而不必担心不必从回调中重新启动定时器.

可能最终不得不多回调发生,如果他们需要一秒钟以上,但是,假设回调是速度不够快,这不会是一个问题.

基本上,第一个回调将是arg3您创建计时器之后的arg4毫秒,然后是每毫秒.这里有关于构造函数的更多细节以及此处的Change方法.