C# 定时器timer技巧,定制执行任务等
一、使用定时器,实现每5分钟执行一次执行事件
1.1 创建执行的方法
//定时器用于定时执行的方法 private void pTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //创建执行线程,并导入方法 Thread ThreadOne = new Thread(WSinfo); //开始执行线程方法 ThreadOne.Start(); //设置线程执行完毕后执行其他线程 ThreadOne.Join(); Thread ThreadTwo = new Thread(WSdis); ThreadTwo.Start(); ThreadTwo.Join(); }
1.2 在窗体Form1_Load方法中创建动态定时器
//用来约束定时器是否执行,该处判断条件复选框checkBox1选择,并且button4可访问 if (checkBox1.Checked && button4.Enabled == true) { //创建动态定时器,并设置执行频率,每隔5分执行一次 System.Timers.Timer pTimer = new System.Timers.Timer(300000); //委托,要执行的方法 pTimer.Elapsed += pTimer_Elapsed; //获取该定时器自动执行 pTimer.AutoReset = true; //这个一定要写,要不然定时器不会执行的 pTimer.Enabled = true; //这个不太懂,有待研究 Control.CheckForIllegalCrossThreadCalls = false; }
二、定时重启程序
前置条件,窗体应用程序上要放置Timer控件,并设置控件值如下图:
2.1 按天重启的方法
代码书写在timer1的timer1_Tick事件中
//设置时间差值存储变量,并赋予NULL值 string dateDiff = null; //获取当前时间 DateTime DateTime1 = DateTime.Now; //此处AddDays(1)是加一天,并且只修正日期部分,时间部分默认00点00分00秒 DateTime DateTime2 = DateTime.Now.AddDays(1).Date; //计算两个时间相差多少秒 int sec = (int)DateTime2.Subtract(DateTime1).TotalSeconds; if (sec == 0) { //延迟1秒执行 Thread.Sleep(1000); //--------------重启软件 start--------------- //开启新的实例 Process.Start(Application.ExecutablePath); //关闭当前实例 Process.GetCurrentProcess().Kill(); //--------------重启软件 end----------------- } if (sec < 0) { this.timerDownCount.Stop(); } else { //把2个时间转成TimeSpan,方便计算 TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); //时间比较,得出差值 TimeSpan ts = ts1.Subtract(ts2).Duration(); //结果 dateDiff = ts.Hours.ToString() + " 小时 " + ts.Minutes.ToString() + " 分钟 " + ts.Seconds.ToString() + " 秒"; this.label18.Text = dateDiff; }
2.2 按小时重启的方法
代码书写在timer1的timer1_Tick事件中
2.2.1 设置全局的启动时间变量,用于初始化启动时间
//软件启动时间参数定义 DateTime dt_qj_datetime1; //获取软件启动日期与时间 dt_qj_datetime1 = DateTime.Now;
2.2.2 设置timer1的timer1_Tick事件
//设置时间差值存储变量,并赋予NULL值 string dateDiff = null; //设置刷新倒计时执行标识初始值 int sec = 0; //获取间隔启动时间指定小时的时间数,如下为6小时后; DateTime DateTime1 = dt_qj_datetime1.AddHours(6); //获取当前时间 DateTime DateTime2 = DateTime.Now; //计算两个时间差值 TimeSpan seec = new TimeSpan(DateTime2.Subtract(DateTime1).Ticks); //判断时间差值小时、分钟、秒均为零则执行 if (seec.Hours == 0 && seec.Minutes == 0 && seec.Seconds == 0) { //延迟1秒执⾏ Thread.Sleep(1000); //--------------重启软件 start--------------- //开启新的实例 Process.Start(Application.ExecutablePath); //关闭当前实例 Process.GetCurrentProcess().Kill(); //--------------重启软件 end----------------- } else { sec = 1; } //理论sec不存在小于0情况,则一直不停止timer1的执行 if (sec < 0) { this.timer1.Stop(); } else { //把2个时间转成TimeSpan,⽅便计算 TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); //时间⽐较,得出差值 TimeSpan ts = ts1.Subtract(ts2).Duration(); //结果 dateDiff = ts.Hours.ToString() + " 小时 " + ts.Minutes.ToString() + " 分钟 " + ts.Seconds.ToString() + " 秒"; this.label18.Text = dateDiff; }
拓展: