2011-12-22 144 views
0

我很困惑會發生什麼,當我禁用一個計時器。它會完成該過程,然後禁用或將其立即禁用,無需完成過程?當我禁用計時器會發生什麼?

例如

Private Sub MyTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyTimer.Tick 
    MyTimer.Enabled = False 
    getMessage()   
    MyTimer.Enabled = True 
End Sub 

我想從別的地方運行的getMessage,所以我需要在這段時間禁止定時器可asured沒有覆蓋任何東西,也計時器關閉之前,它應該完成該功能的代碼。

回答

1

閱讀this有關TimerEnabled屬性的MSDN文章。它聲明

調用Start方法與將Enabled設置爲true相同。同樣,調用Stop方法與將Enabled設置爲false相同。

所以在回答你的問題時,當你禁用它時,它會停止Timer

+0

假設此功能需要5分鐘。現在完成假設我禁用定時器,以便這個功能是否會完成? – samirprogrammer 2011-12-22 12:12:13

+0

如果你的意思是處理'Timer.Tick'事件的函數,那麼它會,但是直到你重新啓動Timer之前它不會再被調用。 getMessage()函數也將完成,因爲它完全獨立於Timer。 – 2011-12-22 12:13:54

1

啓用屬性只是控制何時會觸發下一個事件。上面的三行將做你所解釋的:調用getMessage並在調用返回後啓動Timer。

0

如果您的代碼當前正在執行MyTimer_Tick並且您禁用了計時器,那麼當然會完成MyTimer_Tick。只有下一次致電MyTimer_Tick纔會發生。 禁用定時器後,如果您的回調正在執行,您將不得不等待。您可以使用Thread.Sleep()或使用AutoResetEvent忙於等待。

相關問題