【桌面开发】winForm/WPF 如何保证计时器内操作的原子性
程序员文章站
2022-06-10 11:02:17
...
一、问题
桌面开发项目中,使用到定时器timer,现在的需求是计时器中的代码要每执行完一次之后才允许执行下一次,即不允许计时器中的代码尚未执行完,但是间隔Interval已经完成了,下一次执行又来了,
二、解决
要实现这个需求,笨一点的办法是将计时器的Interval设置的比较大,从而尽量保证上一次的代码执行完了,下一次才执行,但是这是治标不治本的。
第一,Interval的设置很难确定哪个大小是合适的,设置大了不好,间隔太大影响程序,设置小了无法满足需求;
第二,即使设置了一个合适的Interval,也只能满足大部分的时候的程序执行的情况,如果某一次程序执行出现意外,如网络请求延迟等,就无法保证上一次执行完才执行下一次,造成程序错误。
正确的写法是在timer_Tick()中,业务逻辑前面加上timer.Stop(),业务逻辑后面加上timer.Start()
private void timer_Tick(object sender,EventArgs e)
{
timer.Stop();
// 具体业务逻辑....
timer.Start();
}
三、小结
问题解决了,天天打码,天天进步!