小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#中的BackgroundWorker控件

 昵稱10504424 2012-09-12

C#中的BackgroundWorker控件

Keywords: C# .NET BackgroundWorker
Source:
http://txw1958.cnblogs.com/


BackgroundWorker是.NET Framework 里用來執(zhí)行多線程任務(wù)的控件,它允許開發(fā)人員在一個(gè)單獨(dú)的線程上執(zhí)行一些操作。耗時(shí)的操作(如下載和數(shù)據(jù)庫(kù)事務(wù))在長(zhǎng)時(shí)間運(yùn)行時(shí)可能會(huì)導(dǎo)致用戶界面 (UI) 始終處于停止響應(yīng)狀態(tài)。如果您需要能進(jìn)行響應(yīng)的用戶界面,而且面臨與這類操作相關(guān)的長(zhǎng)時(shí)間延遲,則可以使用 BackgroundWorker 類方便地解決問題。

若要在后臺(tái)執(zhí)行耗時(shí)的操作,請(qǐng)創(chuàng)建一個(gè) BackgroundWorker,偵聽那些報(bào)告操作進(jìn)度并在操作完成時(shí)發(fā)出信號(hào)的事件。 可以通過編程方式創(chuàng)建 BackgroundWorker,也可以將它從“工具箱”的“組件”選項(xiàng)卡中拖到窗體上。 如果在 Windows 窗體設(shè)計(jì)器中創(chuàng)建 BackgroundWorker,則它會(huì)出現(xiàn)在組件欄中,而且它的屬性會(huì)顯示在“屬性”窗口中。 

語法

public class BackgroundWorker : Component

 

構(gòu)造函數(shù)

  名稱 說明
公共方法 BackgroundWorker 初始化 BackgroundWorker 類的新實(shí)例。

屬性

  名稱 說明
公共屬性 CancellationPending 獲取一個(gè)值,指示應(yīng)用程序是否已請(qǐng)求取消后臺(tái)操作。
受保護(hù)的屬性 CanRaiseEvents 獲取一個(gè)指示組件是否可以引發(fā)事件的值。 (繼承自 Component。)
公共屬性 Container 獲取 IContainer,它包含 Component。 (繼承自 Component。)
受保護(hù)的屬性 DesignMode 獲取一個(gè)值,用以指示 Component 當(dāng)前是否處于設(shè)計(jì)模式。 (繼承自 Component。)
受保護(hù)的屬性 Events 獲取附加到此 Component 的事件處理程序的列表。 (繼承自 Component。)
公共屬性 IsBusy 獲取一個(gè)值,指示 BackgroundWorker 是否正在運(yùn)行異步操作。
公共屬性 Site 獲取或設(shè)置 Component  ISite (繼承自 Component。)
公共屬性 WorkerReportsProgress 獲取或設(shè)置一個(gè)值,該值指示 BackgroundWorker 能否報(bào)告進(jìn)度更新。
公共屬性 WorkerSupportsCancellation 獲取或設(shè)置一個(gè)值,該值指示 BackgroundWorker 是否支持異步取消。

 方法

  名稱 說明
公共方法 CancelAsync 請(qǐng)求取消掛起的后臺(tái)操作。
公共方法 CreateObjRef 創(chuàng)建一個(gè)對(duì)象,該對(duì)象包含生成用于與遠(yuǎn)程對(duì)象進(jìn)行通信的代理所需的全部相關(guān)信息。 (繼承自MarshalByRefObject。)
公共方法 Dispose() 釋放由 Component 使用的所有資源。 (繼承自 Component。)
受保護(hù)的方法 Dispose(Boolean) 釋放 Component 占用的非托管資源,也可以選擇釋放托管資源。 (繼承自 Component。)
公共方法 Equals(Object) 確定指定的 Object 是否等于當(dāng)前的 Object (繼承自 Object。)
受保護(hù)的方法 Finalize 在通過垃圾回收將 Component 回收之前,釋放非托管資源并執(zhí)行其他清理操作。 (繼承自 Component。)
公共方法 GetHashCode 用作特定類型的哈希函數(shù)。 (繼承自 Object。)
公共方法 GetLifetimeService 檢索控制此實(shí)例的生存期策略的當(dāng)前生存期服務(wù)對(duì)象。 (繼承自 MarshalByRefObject。)
受保護(hù)的方法 GetService 返回一個(gè)對(duì)象,該對(duì)象表示由 Component 或它的 Container 提供的服務(wù)。 (繼承自 Component。)
公共方法 GetType 獲取當(dāng)前實(shí)例的 Type。 (繼承自 Object。)
公共方法 InitializeLifetimeService 獲取控制此實(shí)例的生存期策略的生存期服務(wù)對(duì)象。 (繼承自 MarshalByRefObject。)
受保護(hù)的方法 MemberwiseClone() 創(chuàng)建當(dāng)前 Object 的淺表副本。 (繼承自 Object。)
受保護(hù)的方法 MemberwiseClone(Boolean) 創(chuàng)建當(dāng)前 MarshalByRefObject 對(duì)象的淺表副本。 (繼承自 MarshalByRefObject。)
受保護(hù)的方法 OnDoWork 引發(fā) DoWork 事件。
受保護(hù)的方法 OnProgressChanged 引發(fā) ProgressChanged 事件。
受保護(hù)的方法 OnRunWorkerCompleted 引發(fā) RunWorkerCompleted 事件。
公共方法 ReportProgress(Int32) 引發(fā) ProgressChanged 事件。
公共方法 ReportProgress(Int32, Object) 引發(fā) ProgressChanged 事件。
公共方法 RunWorkerAsync() 開始執(zhí)行后臺(tái)操作。
公共方法 RunWorkerAsync(Object) 開始執(zhí)行后臺(tái)操作。
公共方法 ToString 返回包含 Component 的名稱的 String(如果有)。 不應(yīng)重寫此方法。 (繼承自 Component。)

事件

  名稱 說明
公共事件 Disposed 當(dāng)通過調(diào)用 Dispose 方法釋放組件時(shí)發(fā)生。 (繼承自 Component。)
公共事件 DoWork 調(diào)用 RunWorkerAsync 時(shí)發(fā)生。
公共事件 ProgressChanged 調(diào)用 ReportProgress 時(shí)發(fā)生。
公共事件 RunWorkerCompleted 當(dāng)后臺(tái)操作已完成、被取消或引發(fā)異常時(shí)發(fā)生。

   
示例

本代碼運(yùn)行環(huán)境:Windows XP, Visual Studio 2010, .NET Framework 4, C#

下面的代碼示例演示 BackgroundWorker 類異步執(zhí)行耗時(shí)的基本知識(shí)。 下圖顯示輸出的示例。

要嘗試該代碼,可創(chuàng)建 Windows 窗體應(yīng)用程序。 添加一個(gè)名為 resultLabel 的 Label 控件并添加兩個(gè)名為 startAsyncButton 和 cancelAsyncButton 的 Button 控件。 創(chuàng)建這兩個(gè)按鈕的 Click 事件處理程序。 從工具箱中的“組件”選項(xiàng)卡中,添加命名為 backgroundWorker1 的 BackgroundWorker 組件。 創(chuàng)建 DoWork、 ProgressChanged 和 BackgroundWorker 的 RunWorkerCompleted 事件處理程序。

在窗體的代碼中,用下列代碼替換現(xiàn)有代碼。

復(fù)制代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void startAsyncButton_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy != true)
            {
                // 啟動(dòng)異步操作
                backgroundWorker1.RunWorkerAsync();
            }
            this.startAsyncButton.Enabled = false;
        }

        private void cancelAsyncButton_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.WorkerSupportsCancellation == true)
            {
                // 取消異步操作
                backgroundWorker1.CancelAsync();
            }
            this.startAsyncButton.Enabled = true;
        }

        //主任務(wù)的實(shí)現(xiàn)
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            for (int i = 1; i <= 10; i++)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    // 執(zhí)行計(jì)時(shí)操作并且報(bào)告進(jìn)度
                    System.Threading.Thread.Sleep(500);
                    worker.ReportProgress(i * 10);
                }
            }
        }

        //更新進(jìn)度
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            resultLabel.Text = (e.ProgressPercentage.ToString() + "%");
        }

        //處理后臺(tái)操作結(jié)果
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                resultLabel.Text = "Canceled!";
            }
            else if (e.Error != null)
            {
                resultLabel.Text = "Error: " + e.Error.Message;
            }
            else
            {
                resultLabel.Text = "Done!";
            }
        }
    }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多