C#多線程控制進度條之長任務操作
C#多線程控制進度條之長任務操作
許多種類的應用程序都需要長時間操作,比如:執行一個打印任務,請求一個 Web Service 調用等。用戶在這種情況下一般會去轉移做其他事情來等待任務的完成,同時還希望隨時可以監控任務的執行進度。
C#多線程控制進度條之長任務操作圖1
下面的代碼片斷示例了當長任務執行時用戶界面是如何被更新的。
- // 顯示進度條 ,C#多線程控制進度條之長任務操作
- void ShowProgress( int totalStep, int currentStep )
- {
- _Progress.Maximum = totalStep;
- _Progress.Value = currentStep;
- }
- // 執行任務
- void RunTask( int seconds )
- {
- // 每 1 / 4 秒 顯示進度一次
- for( int i = 0; i < seconds * 4; i++ )
- {
- Thread.Sleep( 250 );
- // 顯示進度條 ,C#多線程控制進度條之長任務操作
- ShowProgress( seconds * 4, i + 1 );
- }
- }
- private void _btnRun_Click(
- object sender, System.EventArgs e )
- {
- RunTask( Convert.ToInt32( _txtSecond.Value ) );
- }
當我們運行上面的程序,在整個長任務的過程中,沒有出現任何問題。這樣就真的沒有問題了嗎?當我們切換應用程序去做其他事情后再切換回來,問題就發生了!主窗體就會出現如下情況:
C#多線程控制進度條之長任務操作圖2
這個問題當然會發生,因為我們現在的應用程序是單線程的,因此,當線程執行長任務時,它同時也就不能重畫用戶界面了。
為什么在我們切換應用程序后,問題才發生呢?這是因為當你切換當前應用程序到后臺再切換回前臺時,我們需要重畫整個用戶界面。但是應用程序正在執行長任務,根本沒有時間處理用戶界面的重畫,問題就會發生。
如何解決問題呢?我們需要將長任務放在后臺運行,把用戶界面線程解放出來,因此我們需要另外一個線程。
C#多線程控制進度條之長任務操作的基本情況就向你介紹到這里,希望對你學習和了解C#多線程控制進度條之長任務操作有所幫助。
【編輯推薦】