当前位置 - 養生大全網 - 孕婦食譜 - 如何顯示進度條

如何顯示進度條

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

鑒於C#使用不多,似乎很難壹下子做出進度條,其他開發任務也在同時進行,所以昨天沒有太大進展。

今天是周末,剛好有空。在查閱了很多網上的資料和例子後,我做了幾個例子供以後使用。

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

第壹種:用BackgroundWorker控制進度條。

BackgroundWorker對象有三個主要事件:

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

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

progress changed-當BackgroundWorker對象的多線程操作狀態更改時觸發。

WorkerReportsProgress-如果希望BackgroundWorker對象異步報告線程的實時進度,則必須將該屬性的值設置為true。

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

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

[csharp]?查看純文本

公?部分?班級?Form1?:?形式

{

///?& lt總結& gt

///?後臺線程

///?& lt/summary & gt;

私人?背景工人?bkWorker?=?新的?background worker();

///?& lt總結& gt

///?步長值

///?& lt/summary & gt;

私人?int?百分比值?=?0;

公?表單1()

{

initialize component();

bkWorker。WorkerReportsProgress?=?真實;

bkWorker。workers supports取消?=?真實;

bkWorker。道克?+=?新的?DoWorkEventHandler(DoWork);

bkWorker。ProgressChanged?+=?新的?ProgressChangedEventHandler(progress changed);

bkWorker。RunWorkerCompleted?+=?新的?RunWorkerCompletedEventHandler(CompleteWork);

}

私人?作廢?btnStart_Click(對象?發件人?EventArgs?e)

{

百分比值?=?10;

this.progressBar1。最大?=?1000;

//?執行後臺操作

bkWorker。RunWorkerAsync();

}

公?作廢?DoWork(對象?發件人?DoWorkEventArgs?e)

{

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

e.結果?=?ProcessProgress(bkWorker,e);

}

公?作廢?ProgessChanged(對象?發件人?ProgressChangedEventArgs?e)

{

//?bkWorker。報告進展?將在這裏被調用,您可以在這裏自定義報告方法。

this.progressBar1。價值?=?e .進展百分比;

int?百分比?=?(int)(e.ProgressPercentage?/?百分比值);

this.label1。文字?=?"處理進度:"?+?轉換。ToString(百分比)?+?"%";

}

公?作廢?CompleteWork(對象?發件人?RunWorkerCompletedEventArgs?e)

{

this.label1。文字?=?“搞定!”;

}

私人?int?ProcessProgress(對象?發件人?DoWorkEventArgs?e)

{

為了什麽?(int?我?=?0;?我?& lt=?1000;?i++)

{

如果?(bkWorker。取消待定)

{

e.取消?=?真實;

回歸?-1;

}

其他

{

//?現狀報告

bkWorker。報告進展情況(壹);

//?等待對於UI刷新界面非常重要。

系統。threading . thread . sleep(1);

}

}

回歸?-1;

}

} ?

以下是運行結果。