c#實現每隔規定時間自動執行程序代碼
在一般的項目中我們很少用到c#實現每隔規定時間自動執行程序代碼,但是如果你經歷的項目多,或者應用程序做的比較多的話,c#實現每隔規定時間自動執行程序代碼就用的比較多。像玩網游做掛機定時發布廣告這樣的項目中就用到了c#實現每隔規定時間自動執行程序代碼。
25億
企業網站管理系統在多年運營seo方面,就用到了自動執行代碼,現在給大家講解一下c#實現每隔規定時間自動執行程序代碼。
在實踐應用中我們可以用三種方法來實現。
//方法一:調用Thread線程執行方法,在執行方法中實現死循環,在每個循環Sleep里設定時間
Thread thread25yi = new Thread(new ThreadStart(obj.MethodTimer1));
thread25yi.Start();
void MethodTimer1()
{
while (true)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + thread25yi.CurrentThread.ManagedThreadId.ToString());
thread25yi.CurrentThread.Join(100);//阻止設定時間
}
}
方法二:使用System.Timers.Timer類
System.Timers.Timer t25yi = new System.Timers.Timer(100);//實例化Timer類,設置時間間隔為100毫秒
t25yi.Elapsed += new System.Timers.ElapsedEventHandler(obj.MethodTimer2);//當到達時間的時候執行MethodTimer2事件
t25yi.AutoReset = true;//false是執行一次,true是一直執行
t25yi.Enabled = true;//設置是否執行System.Timers.Timer.Elapsed事件
while (true)
{
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep(100);
}
void MethodTimer2(object source, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
}
方法三:使用System.Threading.Timer
System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(obj.MethodTimer3), null, 0, 100);
while (true)
{
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep(100);
}
void MethodTimer3(Object state)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
}
Timer構造函數參數說明:
Callback是一個 TimerCallback 委托,表示要執行的方法。
State是一個包含回調方法要使用的信息的對象,或者為空引用(Visual Basic 中為 Nothing)。
dueTime是調用 callback 之前延遲的時間量(以毫秒為單位),指定 Timeout.Infinite 以防止計時器開始計時。指定零 (0) 以立即啟動計時器。
Period是調用 callback 的時間間隔(以毫秒為單位),指定 Timeout.Infinite 可以禁用定期終止。
上述方法中用timer有一個弊端,就是當timer間隔時間內,事件沒執行完,timer就會新建一個線程,從頭開始執行這個事件,而上一個線程繼續執行,這樣就會出現,系統中線程n多,說不定一會兒系統的資源就耗盡了。