實用程式系列-特定時間指定執行某個方法和事件

實用程式系列

這雖然現在有很多排程工具,都相當方便了,但如果有個任務特定時間指定執行某個方法和事件該怎麼做呢?

請參考以下範例

using System;
using System.Timers;
namespace TimerSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Timer timer = new Timer();
            timer.Enabled = true;
            timer.Interval = 1000;  // 執行區隔時間,單位為毫秒; 60000/分鐘
            timer.Start();
            timer.Elapsed += new ElapsedEventHandler(test);
            Console.ReadKey();
        }
        private static void test(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("測試排程事件時間: " + DateTime.Now.ToString());
        }
    }
}



C#中,Timer是一個定時器,它可以按照你所指定的時間執行一個事件。

指定時間區隔是指按照特定時間,如每1分鐘、每10分鐘、每1個小時等執行特定時間;

如果要指定時間的話
 

        class Program
        {

            static void Main(string[] args)
            {
                Timer timer = new Timer();
                timer.Enabled = true;
                timer.Interval = 60000;  //每分鐘
                timer.Start();
                timer.Elapsed += new ElapsedEventHandler(test);

                Console.ReadKey();
            }

            private static void test(object source, ElapsedEventArgs e)
            {

                if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 30)  //10:30
                    Console.WriteLine("測試排程事件時間: " + DateTime.Now.ToString());

            }
        }

其實會延伸這類的想法是因為筆者以前有寫過股價機器人,用這樣方式來每時間區隔去抓取,YAHOO股價資料去比對資料,如果股價機器人知道便宜價的狀況下,就會通知我該買股票嚕,所以排程的實用性是相當實用的!

補充:那其他語言可不可以,當然可以嚕!

Pythons 

 

import schedule
import time

def job():
    print("I'm working...")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)



上面的意思就是:
每十分鐘執行一次任務
每隔一小時執行一次任務

每天10:30執行一次任務
每周一執行一次任務
每周三13:15執行一次任務

元哥的筆記