中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中backgroundworker的使用教程

發布時間:2020-09-12 16:55:59 來源:腳本之家 閱讀:138 作者:秋漓 欄目:編程語言

介紹:

根據MSDN介紹:

         BackgroundWorker 類允許您在單獨的專用線程上運行操作。 耗時的操作(如下載和數據庫事務)在長時間運行時可能會導致用戶界面 (UI) 似乎處于停止響應狀態。 如果您需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker 類方便地解決問題。

       若要在后臺執行耗時的操作,請創建一個 BackgroundWorker,偵聽那些報告操作進度并在操作完成時發出信號的事件。 可以通過編程方式創建 BackgroundWorker,也可以將它從“工具箱”的“組件”選項卡中拖到窗體上。 如果在 Windows 窗體設計器中創建 BackgroundWorker,則它會出現在組件欄中,而且它的屬性會顯示在“屬性”窗口中。

       若要為后臺操作做好準備,請添加 DoWork 事件的事件處理程序。 在此事件處理程序中調用耗時的操作。 若要開始此操作,請調用 RunWorkerAsync。 若要收到進度更新的通知,請處理 ProgressChanged 事件。 若要在操作完成時收到通知,請處理 RunWorkerCompleted 事件。

有2點需要注意的:

   1、由于DoWork事件內部的代碼運行在非UI線程之上,確保在 DoWork 事件處理程序中不操作任何用戶界面對象。 而應該通過 ProgressChanged 和 RunWorkerCompleted 事件與用戶界面進行通信。

   2、BackgroundWorker 事件不跨 AppDomain 邊界進行封送處理。 請不要使用 BackgroundWorker 組件在多個 AppDomain 中執行多線程操作。

使用:

運行顯示:

C#中backgroundworker的使用教程

1、聲明一個BackgroundWorker

BackgroundWorker backgroundWorker1 = null; 

2、初始化BackgroundWorker,設置屬性并綁定事件

public Form1() 
{ 
 InitializeComponent(); 
 backgroundWorker1 = new BackgroundWorker(); 
 backgroundWorker1.WorkerReportsProgress = true;//能否報告進度更新。 
 backgroundWorker1.WorkerSupportsCancellation = true;//是否支持異步取消 
 //綁定事件 
 backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); 
 backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); 
 backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); 
} 

3、BackgroundWorker事件

DoWork事件

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 
{  
 //句柄sender指向的就是該BackgroundWorker。 
 
 //e.Argument 獲取異步操作參數的值 
 //e.Cancel 是否應該取消事件 
 //e.Result 獲取或設置異步操作結果的值(在RunWorkerCompleted事件可能會使用到) 
 object a = e.Argument;//獲取RunWorkerAsync(object argument)傳入的值 
 BackgroundWorker worker = sender as BackgroundWorker; 
    
 for (int i = 1; i <= 10; i++) 
 { 
  if (worker.CancellationPending == true)//在耗時操作中判斷CancellationPending屬性,如果為false則退出 
  { 
   e.Cancel = true; 
   break; 
  } 
  else 
  { 
   // Perform a time consuming operation and report progress. 
   System.Threading.Thread.Sleep(500); 
   worker.ReportProgress(i * 10, "Object userState");// 將觸發BackgroundWorker.ProgressChanged事件,向ProgressChanged報告進度 
  } 
 } 
 e.Result = "結束"; 
} 

RunWorkerCompleted事件:當DoWork事件處理完成之后,將會觸發該事件。

private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) 
{ 
 //e.Cancelled指示異步操作是否已被取消 
 //e.Error 指示異步操作期間發生的錯誤 
 //e.Result 獲取異步操作結果的值,即DoWork事件中,Result設置的值。 
 if (e.Cancelled == true) 
 { 
  resultLabel.Text = "Canceled!"; 
 } 
 else if (e.Error != null) 
 { 
  resultLabel.Text = "Error: " + e.Error.Message; 
 } 
 else 
 { 
  resultLabel.Text = e.Result.ToString(); 
 } 
}

ProgressChanged事件:ProgressChanged事件處理程序的第二個參數e有一個ProgressPercentage屬性,它就由 ReportProgress的第一個參數percentProgress來提供。這個參數一般用來報告該后臺操作完成的進度,然后用ProgressChanged的第二個參數e的ProgressPercentage屬性來獲取該進度信息。如果用戶還想傳遞更多的信息,可以使用ReportProgress的第二種重載,它的第二個參數userState將會傳遞給ProgressChanged事件的參數e的UserState屬性。

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) 
{ 
 //e.ProgressPercentage 獲取異步操作進度的百分比 
 resultLabel.Text = (e.ProgressPercentage.ToString() + "%"); 
 string state = (string)e.UserState;//接收ReportProgress方法傳遞過來的userState 
}

4、按鈕事件

 //開始按鈕 
private void btnStart_Click(object sender, EventArgs e) 
{ 
 if (backgroundWorker1.IsBusy != true)//判斷BackgroundWorker 是否正在運行異步操作。 
 { 
  // Start the asynchronous operation. 
  backgroundWorker1.RunWorkerAsync("object argument");//啟動異步操作,有兩種重載。將觸發BackgroundWorker.DoWork事件 
 } 
} 
 //終止 
private void btnEnd_Click(object sender, EventArgs e) 
{ 
 if (backgroundWorker1.WorkerSupportsCancellation == true) 
 { 
  // Cancel the asynchronous operation. 
  backgroundWorker1.CancelAsync(); //請求取消掛起的后臺操作。調用該方法將使BackgroundWorker.CancellationPending屬性設置為True。 
 } 
} 

總結

以上所述是小編給大家介紹的C#中backgroundworker的使用教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中牟县| 文成县| 拉孜县| 霍林郭勒市| 嵊泗县| 唐海县| 邢台市| 师宗县| 大连市| 行唐县| 安岳县| 西乌珠穆沁旗| 静乐县| 哈密市| 南昌县| 南郑县| 任丘市| 九江县| 广昌县| 沁源县| 依安县| 渝北区| 武定县| 鲜城| 平山县| 梅河口市| 巫溪县| 临邑县| 庆云县| 白水县| 渝中区| 昆明市| 碌曲县| 长阳| 得荣县| 伊川县| 上虞市| 宝清县| 藁城市| 磐安县| 澄迈县|