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之后运行,无限时间.而且我仍然需要复述它来永远这样做.如果它不成立,我为什么还要有第二个参数呢?
你不具备做这种方式.第三个参数(dueTime = 1000)是最初调用计时器之前的延迟,第四个参数(周期=无穷大)控制周期性,后续回调的频率,而不是生成回调的时间.
你拥有它的方式,在当前计时器结束和下一个计时器触发之间会有一秒钟的延迟.
如果你想让它发生的每一秒,你可以简单地为这两个论点提供了1000,而不必担心不必从回调中重新启动定时器.
这可能最终不得不多回调发生,如果他们需要一秒钟以上,但是,假设回调是速度不够快,这不会是一个问题.
基本上,第一个回调将是arg3您创建计时器之后的arg4毫秒,然后是每毫秒.这里有关于构造函数的更多细节以及此处的Change方法.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |