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;
}拓展:

