看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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