程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#定時執行

C#定時執行

編輯:C#入門知識

C#定時執行。本站提示廣大學習愛好者:(C#定時執行)文章只能為提供參考,不一定能成為您想要的結果。以下是C#定時執行正文


 代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common.Utils;

namespace test
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// 記載上次執行時間的文件途徑
        /// </summary>
        private string lastRunTimePath = Path.Combine(Application.StartupPath, "lastRunTime.txt");
        /// <summary>
        /// 上次執行時間,准確到秒
        /// </summary>
        private string lastRunTime
        {
            get
            {
                if (File.Exists(lastRunTimePath))
                {
                    using (StreamReader sr = new StreamReader(lastRunTimePath))
                    {
                        string result = sr.ReadToEnd();
                        sr.Close();
                        return result;
                    }
                }
                return null;
            }
            set
            {
                if (!File.Exists(lastRunTimePath))
                {
                    File.Create(lastRunTimePath);
                }
                using (StreamWriter sw = new StreamWriter(lastRunTimePath, false))
                {
                    sw.Write(value);
                    sw.Close();
                }
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
            timer.Interval = 50; //定時執行的時間准確到秒,那麼Timer的時間距離要小於1秒
            timer.Tick += new EventHandler((a, b) =>
            {
                DateTime now = DateTime.Now;
                if (now.ToString("yyyy-MM-dd HH:mm:ss") != lastRunTime) //假如相等則闡明曾經執行過了
                {
                    lastRunTime = now.ToString("yyyy-MM-dd HH:mm:ss");
                    LogUtil.Log(now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " 時間已到,執行義務");

                    //TODO:在這裡執行義務
                }
            });
            timer.Start();
        }

    }
}
View Code

闡明:

1、為什麼要將lastRunTime存到文件中?

    這是為了順序重起的時分,仍能正確判別時間,不會反復執行。

2、和運用Windows定時義務的方式完成有什麼區別?

    這也是這種完成方式的缺陷,精度不夠高,假如定時執行定時到分鐘,普通精度也只到分鐘,可以使用於關於定時時間准確水平不高的定時義務。雖然減小Interval可以進步定時精度,但消耗CPU資源。

3、為什麼要這樣完成,直接判別時分秒不就行了嗎?

    順序運轉需求時間,哪怕這個時間十分短,會招致跳過某個時間,例如Interval設置為1000,也就是1秒,13時50分29.999秒執行了一次,下一次判別的時分到了13時50分31.001秒,跳過了13時50分30秒,假如秒數用等於判別,就不會執行了。

4、這只是個測試順序,實踐運用需求依據實踐狀況改造一下,比方定時到分鐘就可以了,從配置文件中讀取配置的定時時間,然後按順序中的辦法判別有沒有到這個時間。

測試日志截圖:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved