当前位置:首页 > 技能相关 > C#与C++ > 正文内容

C# 定时器timer技巧,定制执行任务等

admin3年前 (2022-12-27)C#与C++6310 修订时间:2022-12-27 15:45:27

一、使用定时器,实现每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控件,并设置控件值如下图:

image.png

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;
       }


拓展:

         C# DateTime 时间加减操作运算

         C# Timespan 基础知识


 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/index.php?id=269

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。