當前位置:編程學習大全網 - 編程語言 - 如何顯示進度條

如何顯示進度條

最近在做壹個VSS日誌分析工具,使用C#進行開發,在完成了所有功能後,發現,從服務器下載VSS日誌非常耗時,因為此,導致工具使用體驗不好,所以,準備增加壹個進度條。

鑒於C#不經常使用,壹下子搞個進度條貌似比較難,而且其他的開發任務也在壹並進行,所以,昨天壹天,並沒有多大的進展。

今天,是周末,正好可以利用,在查閱了大量網上資料以及實例後,我制作了幾個實例,以備後來之用。

使用C#顯示進度條,涉及到多線程編程,我只探索了使用BackgroundWorker和Thread的方法,下面分別列出。

第壹種:使用BackgroundWorker進行進度條控制

BackgroundWorker對象有三個主要的事件:

DoWork - 當BackgroundWorker對象的多線程操作被執行時觸發。

RunWokerCompleted - 當BackgroundWoker對象的多線程操作完成時觸發。

ProgressChanged - 當BackgroundWorker對象的多線程操作狀態改變時觸發。

WorkerReportsProgress - 如果想讓BackgroundWorker對象以異步的方式報告線程實時進度,必須將該屬性的值設為true。

BackgroundWorker對象的ReportProgress方法用於向主線程返回後臺線程執行的實時進度。

實例代碼壹,控制主窗體中的進度條顯示

[csharp]?view plaincopy

public?partial?class?Form1?:?Form?

{?

///?<summary>?

///?後臺線程?

///?</summary>?

private?BackgroundWorker?bkWorker?=?new?BackgroundWorker();?

///?<summary>?

///?步進值?

///?</summary>?

private?int?percentValue?=?0;?

public?Form1()?

{?

InitializeComponent();?

bkWorker.WorkerReportsProgress?=?true;?

bkWorker.WorkerSupportsCancellation?=?true;?

bkWorker.DoWork?+=?new?DoWorkEventHandler(DoWork);?

bkWorker.ProgressChanged?+=?new?ProgressChangedEventHandler(ProgessChanged);?

bkWorker.RunWorkerCompleted?+=?new?RunWorkerCompletedEventHandler(CompleteWork);?

}?

private?void?btnStart_Click(object?sender,?EventArgs?e)?

{?

percentValue?=?10;?

this.progressBar1.Maximum?=?1000;?

//?執行後臺操作?

bkWorker.RunWorkerAsync();?

}?

public?void?DoWork(object?sender,?DoWorkEventArgs?e)?

{?

//?事件處理,指定處理函數?

e.Result?=?ProcessProgress(bkWorker,?e);?

}?

public?void?ProgessChanged(object?sender,?ProgressChangedEventArgs?e)?

{?

//?bkWorker.ReportProgress?會調用到這裏,此處可以進行自定義報告方式?

this.progressBar1.Value?=?e.ProgressPercentage;?

int?percent?=?(int)(e.ProgressPercentage?/?percentValue);?

this.label1.Text?=?"處理進度:"?+?Convert.ToString(percent)?+?"%";?

}?

public?void?CompleteWork(object?sender,?RunWorkerCompletedEventArgs?e)?

{?

this.label1.Text?=?"處理完畢!";?

}?

private?int?ProcessProgress(object?sender,?DoWorkEventArgs?e)?

{?

for?(int?i?=?0;?i?<=?1000;?i++)?

{?

if?(bkWorker.CancellationPending)?

{?

e.Cancel?=?true;?

return?-1;?

}?

else?

{?

//?狀態報告?

bkWorker.ReportProgress(i);?

//?等待,用於UI刷新界面,很重要?

System.Threading.Thread.Sleep(1);?

}?

}?

return?-1;?

}?

}?

下面是運行結果

  • 上一篇:java編程類的繼承編程問題
  • 下一篇:nc程序輸入方式有哪些
  • copyright 2024編程學習大全網