a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C# BackgroundWorker組件學習入門介紹

2020-01-24 03:07:37
字體:
來源:轉載
供稿:網友

一個程序中需要進行大量的運算,并且需要在運算過程中支持用戶一定的交互,為了獲得更好的用戶體驗,使用BackgroundWorker來完成這一功能.    

 BackgroundWorker類允許您在單獨的專用線程上運行操作。  耗時的操作(如下載和數據庫事務)在長時間運行時可能會導致用戶界面 (UI) 似乎處于停止響應狀態。

  如果您需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker類方便地解決問題(MSDN)。

        若要在后臺執行耗時的操作,請創建一個 BackgroundWorker,偵聽那些報告操作進度并在操作完成時發出信號的事件。  可以通過編程方式創建 BackgroundWorker,

  也可以將它從“工具箱”的“組件”選項卡中拖到窗體上。  如果在 Windows 窗體設計器中創建 BackgroundWorker,則它會出現在組件欄中,而且它的屬性會顯示在“屬性”窗口中(MSDN)。

屬性:

   IsBusy:獲取一個值,指示 BackgroundWorker 是否正在運行異步操作。
   WorkerReportsProgress:獲取或設置一個值,該值指示 BackgroundWorker 能否報告進度更新。
   WorkerSupportsCancellation:獲取或設置一個值,該值指示 BackgroundWorker 是否支持異步取消。

事件:

DoWork:調用 RunWorkerAsync 時發生。
ProgressChanged:調用 ReportProgress 時發生。
RunWorkerCompleted:當后臺操作已完成、被取消或引發異常時發生。

實例:

 窗體設計如下圖:



代碼實現:

復制代碼 代碼如下:

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

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            for (int i = 1; i <= 12; i++)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    System.Threading.Thread.Sleep(500);
                    worker.ReportProgress(i * 10);
                }
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            lbResult.Text = (e.ProgressPercentage.ToString() + "%"+e.UserState);
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                lbResult.Text = "Canceled!";
            }
            else if (e.Error != null)
            {
                lbResult.Text = "Error: " + e.Error.Message;
            }
            else
            {
                lbResult.Text = "Done!";
            }
        }

        private void btnStartAsync_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy != true)
            {
                backgroundWorker1.RunWorkerAsync();
            }
        }

        private void btnCancelAsync_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.WorkerSupportsCancellation == true)
            {
                backgroundWorker1.CancelAsync();
            }
        }
    }
}

運行結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品免费国产 | 久久亚洲精品国产一区最新章节 | segui88久久综合9999 | 欧洲一级大片 | 99日韩| 国产第99页| 99国产视频 | 国产欧美精品一区二区 | 亚洲二区视频 | 亚洲精品久久久一区二区三区 | 久久久久久久99精品免费观看 | 欧美一级欧美三级在线观看 | 羞羞视频免费观看 | 国产精品a久久久久 | 欧美午夜视频在线观看 | 日韩中文在线 | 亚洲一区二区av | 久久久免费精品视频 | 一 级做人爱全视频在线看 一级黄色裸体片 | 成人在线免费视频 | 亚洲国产精品久久久久 | 亚洲成人黄色 | 七龙珠z普通话国语版在线观看 | 国产在线精品一区二区 | 日韩精品一区二区三区中文在线 | 国产欧美精品区一区二区三区 | 韩日一区二区三区 | 中国黄色一级毛片 | 成人av自拍 | 日韩有码在线播放 | 日韩高清成人 | 欧美一级一级一级 | 四虎8848精品成人免费网站 | 最新的黄色网址 | 国产精品一区二区四区 | 国产精品一区久久久久 | 久久久久久久国产精品 | 超碰人人爽 | 亚洲啊v | 日本国产一区二区 | 一级一级黄色片 |