簡體   English   中英

每秒后台計時器,這是正確的方法嗎?

[英]Background Timer every second, is this the right way?

我想每秒鍾跑一個計時器。 但是我不想在UI線程上運行它,以防止凍結。

因此,我使用的不是Designer提供的內置計時器。 而且我不太確定這是否是正確的方法。

  threadtimer = new System.Threading.Timer(timer, null, 1000, Timeout.Infinite);
        private void timer(object obj)
        {
            dowork.....

            threadtimer.Change(1000, Timeout.Infinite);
        }

這似乎是錯誤的,我首先創建線程,並告訴它在無限時間內運行1000次。 而且我仍然必須重述才能永遠做到這一點。 如果第二個參數不成立,為什么還要第二個參數呢?

不必這樣做的。 第三個參數(dueTime = 1000)是最初調用計時器之前的延遲,第四個參數(period = infinity)控制周期性的性質,執行后續回調的頻率, 而不是生成回調的時間。

你有它的方式,會有當前的計時器的結束和下一個觸發的時間之間有一秒鍾的延遲。

如果您希望它每秒發生一次,則只需為這兩個參數提供1000,而不必擔心必須從回調內部重新啟動計時器。

如果它們花費的時間超過一秒,那么最終可能會發生多個回調,但是,假設回調足夠快,那將不是問題。

基本上,第一個回調將在創建計時器后為arg3毫秒,然后每隔arg4毫秒。 有關構造函數Change方法的更多詳細信息,請參見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM