[問題] Windows Service中timer的暫停設定

看板C_Sharp作者 (王建民)時間16年前 (2009/11/17 16:58), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/1
小弟設計了一個視窗服務應用程式,用以常駐於電腦。 以下是部份程式碼。 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)

11/17 21:12, , 1F
使用一個Flag標示是否仍在處理中,是的話, 就略過
11/17 21:12, 1F

11/17 21:14, , 2F
比起卡在timer不知怎麼改寫,要容易得多,山不轉路轉
11/17 21:14, 2F

11/18 10:00, , 3F
請檢查AutoReset屬性... (看Documentation...)
11/18 10:00, 3F

11/18 12:21, , 4F
AutoReset系統預設為true,應無問題,timer方面無法解決
11/18 12:21, 4F

11/18 12:22, , 5F
目前使用旗標的方式來判斷,雖然多幾個流程判定工作
11/18 12:22, 5F

11/18 12:23, , 6F
但還可以撰寫 應能完成
11/18 12:23, 6F

11/18 12:23, , 7F
只是我還是很好奇 timer的問題到底出在哪
11/18 12:23, 7F
文章代碼(AID): #1B0cN1kj (C_Sharp)