“C# Timer定时器的Stop用法 ”
上期使用c#语言对txt文件做了读写删的操作,在这期中顺带做了一个定时器功能,可以不间断的对文件数据做读取。如果想停止文件读写的操作改怎么操作呢?
这个定时器使用的是System.Timers.Timer。Timer有start和stop这两个方法可以用来控制定时器的开始和停止操作。
接下来介绍一下我们使用到的几个属性和方法。
属性:
Timer.AutoReset 属性
获取或设置一个布尔值,该值指示 Timer 是否应只引发一次 Elapsed 事件((false) 或重复 (true))。
如果 Timer 应在每次间隔结束时引发 Elapsed 事件,则为 true;如果它仅在间隔第一次结束后引发一次 Elapsed 事件,则为 false。默认值为 true。
Timer.Enabled属性
获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
如果 Timer 应引发 Elapsed 事件,则为 true;否则,为 false。默认值为 false。
方法:
Timer.Start 方法
通过将 Enabled 设置为 true 开始引发 Elapsed 事件。
Timer.Stop 方法
通过将 Enabled 设置为 false 停止引发 Elapsed 事件。
Timer.Close 方法
释放由 Timer 占用的资源。
详细参考microsoft官方文档的介绍
https://docs.microsoft.com/zh-cn/dotnet/api/system.timers.timer.enabled?view=net-5.0
接下来写个Test程序,衔接上期内容的winfrom程序,在winfrom界面上拖两个button按钮。
在开始按钮的Click事件下添加:
timer.Enabled = true;
timer.AutoReset = true;
timer.Start();
在停止按钮的Click事件下添加:
timer.Enabled = false;
timer.AutoReset = false;
timer.Stop();
timer.Close();
接下来启动程序:
点击停止按钮后程序会把线程里面的事件执行完才会停止。
然鹅。。把这个开始和停止写成函数调用的时候就会出现实例化的错误
尝试过很多种办法后在官网文档中找到解决办法。
这个时候在创建Timer的时候,加上static。就可以解决程序运行到close方法的时候出现实例化问题。
但是继续运行到close的时候发现这个timer事件并没有停止,依旧在运行,断点调试这个功能,也是有运行过这个方法的。后来仔细阅读官网文档,
Start当启用计时器时,对方法的调用不起作用。
如果 AutoReset 为 false
,则 Start 必须调用方法才能重新开始计数。
所以初始化的时候把AutoReset设置为Ture,
使用Enabled属性作为启动项。
最后贴一个官网示例作为参考