看板 C_Sharp 關於我們 聯絡資訊
小弟設計了一個視窗服務應用程式,用以常駐於電腦。 以下是部份程式碼。 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