作者Eleganse (王建民)
看板C_Sharp
標題[問題] Windows Service中timer的暫停設定
時間Tue Nov 17 16:58:39 2009
小弟設計了一個視窗服務應用程式,用以常駐於電腦。
以下是部份程式碼。
namespace WS
{
public partial class Service1 : ServiceBase
{
public Service1()
{ InitializeComponent(); }
protected override void OnStart(string[] args)
{}
protected override void OnStop()
{}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer1.Enabled = false;//進入事件處理程序,時間暫停
該程序()
{首先偵測電腦內某個資料夾是否有其它人上傳的數據資料,
如有,則開始演算工作。
如沒有,則結束本次服務。}
timer1.Enabled = true;//處理事件完畢,時間繼續
}
}
}
我將時間間隔(timer.interval)設定為10秒,
也就是希望電腦能每隔十秒偵測一次該資料夾是否有人上傳,
而我所設計的程序,由於內含大量資料(數千萬筆)的拷貝工作,
正常情況下至少要5分鐘,
為了不使5分鐘內連續執行了(30次),在進入程序時,
我特意將timer.Enabled關閉,待執行完畢後再開啟。
但程式並不如我想像的方式進行,這樣的寫法,總共只會執行一次,
往後再有人上傳資料,該服務也不會動作了,
debug了很久,始終找不到問題,
是否 timer.Enabled=true 該行放的位置有錯?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.61.67
※ 編輯: Eleganse 來自: 140.115.61.67 (11/17 17:03)
推 petrushka:使用一個Flag標示是否仍在處理中,是的話, 就略過 11/17 21:12
→ petrushka:比起卡在timer不知怎麼改寫,要容易得多,山不轉路轉 11/17 21:14
推 leicheong:請檢查AutoReset屬性... (看Documentation...) 11/18 10:00
→ Eleganse:AutoReset系統預設為true,應無問題,timer方面無法解決 11/18 12:21
→ Eleganse:目前使用旗標的方式來判斷,雖然多幾個流程判定工作 11/18 12:22
→ Eleganse:但還可以撰寫 應能完成 11/18 12:23
→ Eleganse:只是我還是很好奇 timer的問題到底出在哪 11/18 12:23