BackgroundWorker用法示例

来源:https://www.cnblogs.com/LXLR/archive/2022/07/04/16441892.html
-Advertisement-
Play Games

BackgroundWorker: 1.定義:是.net里用來執行多線程任務的控制項,它允許編程者在一個單獨的線程上執行一些操作。 2.使用場景:耗時的操作(如下載和資料庫事務)長時間運行時可能會導致用戶界面 (UI) 始終處於停止響應狀態。如果我們需要能進行響應的用戶界面,而且面臨與這類操作相關的長 ...


BackgroundWorker:

1.定義:是.net里用來執行多線程任務的控制項,它允許編程者在一個單獨的線程上執行一些操作。

2.使用場景:耗時的操作(如下載和資料庫事務)長時間運行時可能會導致用戶界面 (UI) 始終處於停止響應狀態。如果我們需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用BackgroundWorker類方便地解決問題。

3.控制項簡介:有三個控制項

  • DoWork: 在程式中調用RunWorkerAsync會啟動DoWork事件處理。
  • ProgressChanged: 在事件處理過程中,調用ReportProgress方法則會啟動ProgressChanged事件的事件處理。
  • RunWorkerCompleted: 當DoWork事件處理完成時,則會觸發RunWorkerCompleted事件。
  • 註意:在DoWork事件處理程式中不操作任何用戶界面對象,否則會停止響應。應該通過ProgressChanged和RunWorkerCompleted事件與用戶界面進行通信。

4.示例:

 1 using System;
 2 using System.ComponentModel;
 3 using System.Threading;
 4 using System.Windows.Forms;
 5  
 6 namespace bcworker
 7 {
 8     public partial class Form1 : Form
 9     {
10         //後臺工作
11         private BackgroundWorker bw = new BackgroundWorker();
12  
13         public Form1()
14         {
15             InitializeComponent();
16             //後臺工作初始化
17             bw.WorkerReportsProgress = true;//報告進度
18             bw.WorkerSupportsCancellation = true;//支持取消
19             bw.DoWork += new DoWorkEventHandler(bgWorker_DoWork);//開始工作
20             bw.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);//進度改變事件
21             bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);//進度完成事件
22         }
23  
24         private void btnStart_Click(object sender, EventArgs e)
25         {
26             //後臺工作運行中,避免重入
27             if (bw.IsBusy) return;
28             bw.RunWorkerAsync("參數");//觸發DoWork事件並非同步執行,IsBusy置為True
29         }
30         //後臺工作將非同步執行
31         public void bgWorker_DoWork(object sender, DoWorkEventArgs e)
32         {
33             //(string)e.Argument == "參數";
34             for (int i = 0; i <= 100; i++)
35             {
36  
37                 if (bw.CancellationPending)
38                 {//用戶取消了工作
39                     e.Cancel = true;
40                     return;
41                 }
42                 else
43                 {
44                     bw.ReportProgress(i, "Working");//報告進度,觸發ProgressChanged事件
45                     Thread.Sleep(10);//模擬工作
46                 }
47             }
48         }
49         //進度改變事件
50         public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e)
51         {
52             //(string)e.UserState=="Working"
53             progressBar1.Value = e.ProgressPercentage;//取得進度更新控制項,不用Invoke了
54         }
55         //後臺工作執行完畢,IsBusy置為False
56         public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
57         {
58             //e.Error == null 是否發生錯誤
59             //e.Cancelled 完成是由於取消還是正常完成
60         }
61  
62         private void btnCancel_Click(object sender, EventArgs e)
63         {
64             if (bw.IsBusy) bw.CancelAsync();//設置CancellationPending屬性為True
65         }
66  
67     }
68 }
69 ————————————————
70 版權聲明:本文為CSDN博主「AAA張紹山」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
71 原文鏈接:https://blog.csdn.net/donowtop/article/details/79839597

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 六月,秋秋發生大規模盜號事件,眾說紛紜,也有說因為某習通買賣個人信息導致的,有說是因為點了圖片中的網站導致中毒被盜的,還有說企鵝資料庫被攻擊導致賬號被盜的,反正公說公有理婆說婆有理。 但是吧,人吶,一般都喜歡湊熱鬧,於是乎,我直接用Python把圍脖爬了一遍,看他們爭論的不亦樂乎,我開心極了~ 兄弟 ...
  • #雜談 #Java腳本 因本人英語不好在使用Obsidian時,一些插件的設置英文多令人頭痛。故有寫一個的翻譯插件介紹和設置腳本的想法。看到有些前人寫的一下翻譯方法,簡直慘目忍睹。竟然要手動。這個應該寫好到只需要一鍵就可以漢化的地步嗎? 好吧。我承認這有些難度。翻譯引擎就用有道的吧。我覺得它對專業名 ...
  • 前言 就國內來說,Java毫無疑問是後端語言中的No.1沒有之一,所以今天我們也來0基礎學習Java!!! Java的好處(針對測試工程師) 面試加分->漲薪 大多數公司服務端用的都是Java,學習之後能看懂後臺邏輯,方便快速定位問題 在如此**捲**的環境下,不得不去跟著一起捲(躺平不香嗎?學什麼 ...
  • 發佈一個用於測試 Webservice 和資料庫連接的工具。 ...
  • 來源:blog.csdn.net/dabusiGin/article/details/105483426 錯誤的結論 在網上搜索HashMap中變數modCount的作用時,大部分的解釋都是這樣: Fail-Fast 機制 我們知道 java.util.HashMap 不是線程安全的,因此如果在使用 ...
  • 使用背景: 項目中需要用的富文本框去上傳視頻,圖片的話大部分都是可以的。相對來說,國外的富文本框很成熟。但鑒於文檔是英語,這裡使用了百度的富文本框。 採用的api的方式,調用介面進行上傳文件。話不多說,開擼! 準備: 創建一個.net mvc的項目。下載百度富文本框.net 版本的js文件。 創建項 ...
  • 一:背景 1. 講故事 前幾天有位朋友在 B站 加到我,說他的程式出現了 線程數 爆高的問題,讓我幫忙看一下怎麼回事,截圖如下: 說來也奇怪,這些天碰到了好幾起關於線程數無緣無故的爆高,不過那幾個問題比這一篇要複雜的多,主要涉及到非托管層面,分享這一篇的目的主要是它很有代表性,很有必要。 閑話不多說 ...
  • 效果 概述 最近有個小需求要用雙滑塊表示一個取值範圍,於是就簡單做了個用戶控制項,在此記錄下. 使用矩形Rectangle表示範圍,橢圓Ellipse表示滑塊,使用Canvas控制滑塊的左右移動. 橢圓的滑鼠按下事件里強制獲取滑鼠事件焦點,避免移動過快或移出控制項範圍時,滑塊就不跟著跑了.橢圓的滑鼠抬起 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...