timer使用思考

timer是winform程序的常用組件之一,timer的意思是計時器,就是可以實現計時的功能。我們需要定時上傳、查詢和更新數據的時候,可以使用timer組件來實現。
timer本身沒有什麼問題,使用方法就是設置interval屬性,在tick事件函數中實現定時任務,然後在form的load事件中開始timer就行。但是有一個問題,定時處理的業務需要較長時間的話,timer的執行會影響到應用程序界面的響應,可能會出現程序假死的情況。
我們該如何解決這個問題呢?在處理耗時較長業務的時候,程序既可以正常執行timer的tick事件,又不會出現假死的情況。我的解決方法,添加BackgroundWorker組件,將耗時的業務處理交給BackgroundWorker執行。timer只需要定時執行BackgroundWorker的RunWorkerAsync函數就可以了。我已經在幾個項目中使用過了,效果真的很不錯。我現在把相關的代碼貼出來,供大家參考參考。timer的tick事件,如下代碼所示

/// <summary>
/// timer是否在執行業務,避免重複執行相同的內容
/// </summary>
private bool isRunning = false;

private void timer1_Tick(object sender, EventArgs e)
        {            
              if (isRunning) return;

              isRunning = true;//執行中

              this.backgroundWorker1.RunWorkerAsync();
        }

以上代碼可以看到,我們只要在timer的tick事件中加入

this.backgroundWorker1.RunWorkerAsync();

這一句就可以異步執行BackgroundWorker組件的DoWork事件了。應用程序的界面不僅不會出現假死,而且還能夠正常執行定時業務。我們只要將耗時較長的業務處理放到BackgroundWorker的DoWork事件中執行就好了。如下代碼所示:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            log.WriteLogo("開始上傳ALL處方");

            //上傳西藥處方
            UploadWestMedicine();

            //上傳中醫處方
            UploadChineseMedicine();

            log.WriteLogo("結束上傳ALL處方");
        }

性能真的很重要,會直接影響到用戶體驗。程序經常出現假死,用戶體驗就會很差了。我們引入了BackgroundWorker這個組件之後,讓timer運行更加順暢。這種結合會讓程序變得更加完善和美好。

發佈了50 篇原創文章 · 獲贊 6 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章