※ 引述《GANTZZ (我愛吃蝦子)》之銘言:
: 各位板友好
: 小弟現在在寫一個程式
: 程式裡有兩個timer
: 第1個Timer的intreval為1秒
: 第2個Timer的interval為0.5秒
: 在timer1中有一個while迴圈的結束條件為當timer2執行結束時或變數AA>10時即跳離此
: while迴圈,即為必須同時滿足"變數AA<10"和"timer2還在執行"這兩個條件才能進入
: 此while迴圈
: 程式碼大概如下
: timer1
: {
: timer2.enable = ture;
: while ( AA < 10 && timer2.enable==ture )
: {
: .....
: }
: }
: timer2
: {
: timer2.enable = false;
: }
: 但用此寫法" while ( AA < 10 && timer2.enable==ture )"這個判斷式似乎無法成立
: 請問各位板友
: 該怎麼解決此問題
: 謝謝大家
並不是這個條件式無法成立
而是本身的執行緒被咬在 timer1 的 while 中
先瞭解 timer 這元件不是真的執行緒
它運作的方式是以事件的方式去觸發執行
也就是當在跑 timer1_tick 的時候
事件就不會觸發和執行 timer2_tick
必須要排隊等 timer1_tick 結束才能輪到
不過可以在 while 中加入 Application.DoEvents();
當跑到這行的時候就會停在這
暫時先去處理其他佇列中的事件
這樣 timer2_tick 就能順利被執行
等其他事件處理完又會回到 timer1_tick 暫停的地方繼續執行
不過用這種方式會讓程式變的很假
因為這根本不是真正兩個 timer 在同時運作
如果你要有自己執行緒的 timer
可以用 System.Threading.Timer 試看看
希望對你有幫助 XDD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.145.130