亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# BackgroundWorker使用教程

2019-10-29 19:58:54
字體:
來源:轉載
供稿:網友

查詢了一下MSDN文檔,其中微軟就BackgroundWorker類的功能有這么一個描述(英文的,根據個人理解翻譯):BackgroundWorker類允許您在單獨的線程上執行某個可能導致用戶界面(UI)停止響應的耗時操作(比如文件下載數據庫事務等),并且想要一個響應式的UI來反應當前耗時操作的進度。

可以看的出來,BackgroundWorker組件提供了一種執行異步操作(后臺線程)的同時,并且還能妥妥的顯示操作進度的解決方案。于是乎,我便深入的了解了一下BackgroundWorker類。針對BackgroundWorker類的部分重要屬性和方法進行了一次總結。

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、附源代碼:

前臺

C#,BackgroundWorker

后臺

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(); } }}

運行結果:

C#,BackgroundWorker

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本国产高清不卡| 国产精品久久久久久影视| 国产91精品高潮白浆喷水| 国产精品久久久久久久久久新婚| 国产精品美女在线观看| 91精品国产综合久久香蕉最新版| 91精品国产91久久久久久不卡| www国产91| 亚洲图片欧美日产| 欧美日韩亚洲激情| 91美女福利视频高清| 日韩美女在线观看一区| 欧美成人手机在线| 欧美疯狂做受xxxx高潮| 欧美日韩在线视频一区二区| 少妇激情综合网| 激情懂色av一区av二区av| 91av视频导航| 蜜臀久久99精品久久久久久宅男| 欧美性xxxxxx| 国产亚洲精品日韩| 日韩一区二区三区xxxx| 中文字幕精品www乱入免费视频| 国产一区二区三区在线播放免费观看| 亚洲欧洲在线观看| 91麻豆国产语对白在线观看| 亚洲午夜小视频| 国产精品va在线| 精品美女久久久久久免费| 欧美成人免费大片| 亚洲天堂视频在线观看| 久久精品色欧美aⅴ一区二区| 国产精品一区二区在线| 精品久久久免费| 日韩在线观看网址| 九九精品视频在线| 欧美成人在线免费视频| 在线播放国产一区中文字幕剧情欧美| 91精品久久久久久综合乱菊| 精品小视频在线| 欧美三级欧美成人高清www| 精品久久久视频| 精品动漫一区二区| 在线国产精品播放| 欧美激情亚洲视频| 亚洲成人久久一区| 中文字幕av一区二区三区谷原希美| 最好看的2019的中文字幕视频| 亚洲石原莉奈一区二区在线观看| 国产精品福利在线观看网址| 亚洲精品福利视频| 日韩成人在线免费观看| www.久久色.com| 欧美国产精品va在线观看| 亚洲**2019国产| 亚洲美女中文字幕| 最近2019年日本中文免费字幕| 亚洲无线码在线一区观看| 久久综合五月天| 最近日韩中文字幕中文| 亚洲国产高清自拍| 亚洲黄页视频免费观看| 91精品啪在线观看麻豆免费| 国产成人精品久久二区二区91| 色偷偷噜噜噜亚洲男人的天堂| 国产精品久久久久久久9999| 日韩视频在线观看免费| 亚洲福利在线观看| 亚洲美女激情视频| 国产精品久久不能| 亚洲国产精品推荐| 日韩欧美aaa| 亚洲国产精品高清久久久| 国产精品美腿一区在线看| 国产成人精品999| 两个人的视频www国产精品| 欧美性黄网官网| 这里只有精品在线观看| 激情亚洲一区二区三区四区| 国产精品欧美一区二区| 国内精品久久久久久久| 久久这里有精品| 色爱精品视频一区| 久久影院在线观看| 中文字幕国产亚洲| 亚洲乱码av中文一区二区| 国产日韩专区在线| 中文字幕在线亚洲| 欧美激情中文字幕在线| 色偷偷噜噜噜亚洲男人的天堂| 日韩美女av在线免费观看| 亲爱的老师9免费观看全集电视剧| 亚洲电影免费观看高清完整版| 亚洲女人被黑人巨大进入| 91精品国产高清久久久久久久久| 性欧美在线看片a免费观看| 亚洲欧美日韩爽爽影院| 这里精品视频免费| 亚洲影院在线看| 91久久精品国产91久久| 成人免费在线视频网站| 欧美日韩亚洲成人| 黑人巨大精品欧美一区二区免费| www.午夜精品| 亚洲精品美女在线观看| 国产精品福利在线观看| 精品二区三区线观看| 国产精品国产三级国产aⅴ9色| 亚洲自拍小视频| 奇米四色中文综合久久| 国产亚洲a∨片在线观看| 8090理伦午夜在线电影| 国产精品中文字幕在线| 亚洲精品小视频在线观看| 国语自产精品视频在免费| 91情侣偷在线精品国产| 日本伊人精品一区二区三区介绍| 欧美日韩在线观看视频小说| 韩日欧美一区二区| 亚洲成人动漫在线播放| 亚洲精品自在久久| 国内精品久久久久影院优| 亚洲精品视频中文字幕| 欧美多人爱爱视频网站| 欧美成人免费va影院高清| 国产一区二区三区丝袜| 欧美激情一区二区久久久| 久久男人资源视频| 91精品啪在线观看麻豆免费| 国产精品视频资源| 国产主播在线一区| 狠狠色狠狠色综合日日小说| 91av视频在线观看| 日韩黄色av网站| 亚洲а∨天堂久久精品9966| 日韩精品在线观看一区二区| 久久久久久国产免费| 亚洲欧洲午夜一线一品| 亚洲成色www8888| 久久久久久国产精品三级玉女聊斋| 亚洲第一二三四五区| 久久久中精品2020中文| 丝袜美腿亚洲一区二区| 国产成人综合一区二区三区| 欧美一级视频一区二区| 国产成人午夜视频网址| 欧美成人午夜激情视频| 欧美日韩国产综合视频在线观看中文| 久久艳片www.17c.com| 亚洲一区二区三区视频播放| 91中文字幕在线| 精品久久久av| 国产一区二区三区三区在线观看| 亚洲激情在线观看视频免费| 日韩在线观看你懂的| 欧美日韩中文字幕在线| 91极品女神在线| 国内精品在线一区| 这里只有精品视频在线| 亚洲无限av看| 国产欧美婷婷中文| 国产精品丝袜一区二区三区| 国产97在线亚洲| 国产不卡视频在线|