亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

BackgroundWorker怎么在C#項目中使用

發布時間:2021-03-26 16:04:44 來源:億速云 閱讀:191 作者:Leah 欄目:編程語言

BackgroundWorker怎么在C#項目中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1、屬性:

WorkerReportsProgress

bool類型,指示BackgroundWorker是否可以報告進度更新。當該屬性值為True是,將可以成功調用ReportProgress方法,否則將引發InvalidOperationException異常。 用法:

private BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.WorkerReportsProgress = true;

WorkerSupportsCancellation

bool類型,指示BackgroundWorker是否支持異步取消操作。當該屬性值為True是,將可以成功調用CancelAsync方法,否則將引發InvalidOperationException異常。 用法:

bgWorker.WorkerSupportsCancellation = true;

CancellationPending

bool類型,指示應用程序是否已請求取消后臺操作。此屬性通常放在用戶執行的異步操作內部,用來判斷用戶是否取消執行異步操作。當執行BackgroundWorker.CancelAsync()方法時,該屬性值將變為True。 用法:

//在DoWork中鍵入如下代碼
for (int i = 0; i <= 100; i++)
{
 if (bgWorker.CancellationPending)
 {
 e.Cancel = true;
 return;
 }
 else
 {
 bgWorker.ReportProgress(i,"Working");
 System.Threading.Thread.Sleep(10);
 }
}

IsBusy

bool類型,指示BackgroundWorker是否正在執行一個異步操作。此屬性通常放在BackgroundWorker.RunWorkerAsync()方法之前,避免多次調用RunWorkerAsync()方法引發異常。當執行BackgroundWorker.RunWorkerAsync()方法是,該屬性值將變為True。

//防止重復執行異步操作引發錯誤
if (bgWorker.IsBusy)
 return;
bgWorker.RunWorkerAsync();

2、方法:

RunWorkerAsync()

開始執行一個后臺操作。調用該方法后,將觸發BackgroundWorker.DoWork事件,并以異步的方式執行DoWork事件中的代碼。

該方法還有一個帶參數的重載方法:RunWorkerAsync(Object)。該方法允許傳遞一個Object類型的參數到后臺操作中,并且可以通過DoWork事件的DoWorkEventArgs.Argument屬性將該參數提取出來。
注:當BackgroundWorker的IsBusy屬性為True時,調用該方法將引發InvalidOperationException異常。

//在啟動異步操作的地方鍵入代碼
bgWorker.RunWorkerAsync("hello");

ReportProgress(Int percentProgress)

報告操作進度。調用該方法后,將觸發BackgroundWorker. ProgressChanged事件。另外,該方法包含了一個int類型的參數percentProgress,用來表示當前異步操作所執行的進度百分比。

該方法還有一個重載方法:ReportProgress(Int percentProgress,?Object userState)。允許傳遞一個Object類型的狀態對象到 ProgressChanged事件中,并且可以通過ProgressChanged事件的ProgressChangedEventArgs.UserState屬性取得參數值。

注:調用該方法之前需確保WorkerReportsProgress屬性值為True,否則將引發InvalidOperationException異常。
用法:

for (int i = 0; i <= 100; i++)
{
 //向ProgressChanged報告進度
 bgWorker.ReportProgress(i,"Working");
 System.Threading.Thread.Sleep(10);
}

CancelAsync()

請求取消當前正在執行的異步操作。調用該方法將使BackgroundWorker.CancellationPending屬性設置為True。
但需要注意的是,并非每次調用CancelAsync()都能確保異步操作,CancelAsync()通常不適用于取消一個緊密執行的操作,更適用于在循環體中執行。

用法:

//在需要執行取消操作的地方鍵入以下代碼
bgWorker.CancelAsync();

3、事件:

DoWork

用于承載異步操作。當調用BackgroundWorker.RunWorkerAsync()時觸發。
需要注意的是,由于DoWork事件內部的代碼運行在非UI線程之上,所以在DoWork事件內部應避免于用戶界面交互,而于用戶界面交互的操作應放置在ProgressChanged和RunWorkerCompleted事件中。

ProgressChanged

當調用BackgroundWorker.ReportProgress(int percentProgress)方式時觸發該事件。
該事件的ProgressChangedEventArgs.ProgressPercentage屬性可以接收來自ReportProgress方法傳遞的percentProgress參數值,ProgressChangedEventArgs.UserState屬性可以接收來自ReportProgress方法傳遞的userState參數。

RunWorkerCompleted

異步操作完成或取消時執行的操作,當調用DoWork事件執行完成時觸發。
該事件的RunWorkerCompletedEventArgs參數包含三個常用的屬性Error,Cancelled,Result。其中,Error表示在執行異步操作期間發生的錯誤;Cancelled用于判斷用戶是否取消了異步操作;Result屬性接收來自DoWork事件的DoWorkEventArgs參數的Result屬性值,可用于傳遞異步操作的執行結果。

4、附源代碼:

前臺

BackgroundWorker怎么在C#項目中使用

后臺

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrograssBar
{
 public partial class PrograssBarUseBackgroundWorker : Form
 {

 private BackgroundWorker bgWorker = new BackgroundWorker();

 public PrograssBarUseBackgroundWorker()
 {
 InitializeComponent();
 InitializeBackgroundWorker();
 }

 private void InitializeBackgroundWorker()
 {
 bgWorker.WorkerReportsProgress = true;
 bgWorker.WorkerSupportsCancellation = true;
 bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
 bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);
 bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);
 }

 private void btnStart_Click(object sender, EventArgs e)
 {
 if (bgWorker.IsBusy)
 return;
 this.progressBar1.Maximum = 100;
 this.btnStart.Enabled = false;
 this.btnStop.Enabled = true;
 bgWorker.RunWorkerAsync("hello");
 }

 public void bgWorker_DoWork(object sender, DoWorkEventArgs e)
 {
 for (int i = 0; i <= 100; i++)
 {
 if (bgWorker.CancellationPending)
 {
 e.Cancel = true;
 return;
 }
 else
 {
 bgWorker.ReportProgress(i,"Working");
 System.Threading.Thread.Sleep(10);
 }
 }
 }

 public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e)
 {
 //string state = (string)e.UserState;//接收ReportProgress方法傳遞過來的userState
 this.progressBar1.Value = e.ProgressPercentage;
 this.label1.Text = "處理進度:" + Convert.ToString(e.ProgressPercentage) + "%";
 }

 public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
 if(e.Error!=null)
 {
 MessageBox.Show(e.Error.ToString());
 return;
 }
 if (!e.Cancelled)
 this.label1.Text = "處理完畢!";
 else
 this.label1.Text = "處理終止!";

 }

 private void btnStop_Click(object sender, EventArgs e)
 {
 this.btnStart.Enabled = true;
 this.btnStop.Enabled = false;
 bgWorker.CancelAsync();
 }
 }
}

運行結果:

BackgroundWorker怎么在C#項目中使用

關于BackgroundWorker怎么在C#項目中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

江西省| 台南县| 嘉黎县| 漳州市| 安顺市| 固镇县| 时尚| 苍梧县| 开原市| 庆城县| 石狮市| 深州市| 昆明市| 屯留县| 磐安县| 五大连池市| 多伦县| 田东县| 运城市| 邢台县| 肇东市| 永仁县| 潼关县| 闵行区| 合川市| 酉阳| 廊坊市| 钟祥市| 双峰县| 芒康县| 东乡族自治县| 遂川县| 徐州市| 安达市| 普宁市| 明光市| 城市| 仁怀市| 南溪县| 桐城市| 九龙城区|