我有2個全球System.Windows.Forms.Timer
在我的表格。兩者都是在窗體的構造函數中初始化的。但尚未開始。構造函數啓動新線程,該線程啓用並啓動兩個定時器。顯然這是所有跨線程,但它不會引發任何跨線程異常。但它甚至不起作用。它不會觸發Timer.Tick
方法。下面是代碼:計時器不在十字螺紋工作
第1種方法:
在形式的構造函數:
KeepMeAliveTimer = new Timer(); //timer 1
KeepMeAliveTimer.Interval = 15000;
KeepMeAliveTimer.Tick += KeepMeAlive;
timer1 = new Timer(); //timer 2
timer1.Interval = 15000;
timer1.Tick += timer1_Tick;
//started a new thread
在新THEAD:
//after performing some tasks, it enables the timers
KeepMeAliveTimer.Enabled = true; //timer 1
KeepMeAliveTimer.Start();
timer1.Enabled = true; //timer 2
timer1.Start();
但它沒有啓動起來定時器的Tick事件和甚至沒有拋出任何異常。
第2種方法:
但是當我初始化並在同一個線程(主線程)啓用Timers
他們是完美的工作:
KeepMeAliveTimer = new Timer(); //timer 1
KeepMeAliveTimer.Interval = 15000;
KeepMeAliveTimer.Tick += KeepMeAlive;
KeepMeAliveTimer.Enabled = true;
KeepMeAliveTimer.Start();
timer1 = new Timer(); //timer 2
timer1.Interval = 15000;
timer1.Tick += timer1_Tick;
timer1.Enabled = true;
timer1.Start();
現在的問題是;如果甚至沒有任何異常,爲什麼第一種方法不起作用?
例外ae(調試幫助)。不保證它是密封的。您的代碼不是線程安全的,並且不起作用。 '1 + 1 = 2'。 –
要完成,請指定哪個Timer類(名稱空間)。 .NET至少有3. –
System.Windows.Forms.Timer依賴於Windows消息隊列被推送到它我相信。如果它在沒有訪問消息隊列的線程上,則它無法執行任何操作。 – Brad