程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# BackgroundWorker的使用

C# BackgroundWorker的使用

編輯:C#入門知識

此方法可以實現後台程序調用、創建線程、遮屏的效果。
BackgroundWorker主要有三個事件:RunWorkerCompleted,ProgressChanged,DoWork
[csharp] 
      this.backgroundWorker1.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); 
 
      this.backgroundWorker1.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); 
 
      this.backgroundWorker1.DoWork+=new DoWorkEventHandler(backgroundWorker1_DoWork); 

當點擊一個按鈕想實現讀條的方法時,需要調用BackgroundWorker對象的RunWorkerAsync方法,該方法會觸發DoWork事件,該事件的方法中
可以用兩種方式獲得BackgroundWorker對象,
[csharp] 
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
 
        { 
 
            BackgroundWorker worker = (BackgroundWorker)sender; 
 
lt; 
        }
或者 直接可以獲得類中的BackgroundWorker,在DoWork方法中主要是讀條處理的細節方面,通過BackgroundWorker 對象的ReportProgress把百分數傳出,
for循環中最大值是100可以表示為百分數的分母,與progressBar的Maximum的屬性保持一致。此處還要注意的是,要加上 Thread.Sleep(100),否則線程一直執行,主面板其他控件則無法使用, 也就無法取消當前線程。在每次循環中,一定要校驗下CancellationPending是否為真,表示當前線程是否被用戶中斷。
[csharp] 
 for (int i = 0; i < 100; i++) 
 
            { 
 
                if (bk.CancellationPending) //這裡判斷一下是否用戶要求取消後台進行,並可以盡早退出。 
 
                { 
 
                    bk.ReportProgress(i, String.Format("當前值是 {0},操作被用戶申請中斷", i)); 
 
                    return false; 
 
                } 
 
                Thread.Sleep(100); 
 
                //處理的過程中,通過這個函數,向主線程報告處理進度,最好是折算成百分比,與外邊的進度條的最大值必須要對應。這裡,我沒有折算,而是把界面線程的進度條最大值調整為與這裡的總數一致。 
 
                bk.ReportProgress(i, String.Format(" {0}% ", i)); 
 
            } 
通過調用CancelAsync方法可以實現後台線程的終止,不管任何方式的終止都會出發RunWorkerCompleted方法。
最後要說的是progressChanged這個事件,該事件被ReportProgress引發,一般用來做後台線程值變化時響應消息,來處理界面的顯示工作
比如:
[csharp] 
    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
 
        { 
 
            this.progressBar1.Value = e.ProgressPercentage; 
 
            this.label1.Text = e.UserState.ToString(); 
 
            this.label1.Update(); 
 
        } 


作者:haqer0825

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved