zoukankan      html  css  js  c++  java
  • c# BackgroundWorker控件使用方法


    在使用之前先了解一些知識。

    1、BackgroundWorker作用:

        主要用在單獨的線程上執行操作。BackgroundWorker类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题。


    2、BackgroundWorker常用屬性:

    名稱

    說明

    CancellationPending

    指示應用程式是否已請求取消後台操作即(是否正在停止中)

    IsBusy

    獲取一個值,指示 BackgroundWorker 是否正在運行非同步操作。

    WorkerReportsProgress

    該值指示 BackgroundWorker 能否報告進度更新。

    WorkerSupportsCancellation

    該值指示 BackgroundWorker 是否支援非同步取消。


    3、BackgroundWorker常用事件:

    控制項

    名稱

    說明

    TextBox

    txtSelect

    用於顯示被選擇文件的路徑

    Button

    btnSelectFile

    用於選擇文件

    TextBox

    txtResult

    用於顯示後台程式執行的結果

    ProgressBar

    pgbValue

    用於顯示背景程式執行的結果

    Button

    btnRun

    用於執行背景程式

    Button

    btnCancel

    用於取消正在執行的背景程式

    BackgroundWorker

    bgwWorker

    用於後台運行程式


    4、注意:

                運行RunWorkerAsync()方法會觸發DoWork事件
                運行ReportProgress()方法會觸發ProgressChanged事件

    5、使用過程:

          5.1 在窗體中加入控件
    5.2 加入
    BackgroundWorker的事件
    5.3 在DoWork事件的方法中調用需要執行的方法
    5.4 在ProgressChanged事件的方法中顯示進度
    5.5 在RunWorkerCompleted事件的方法中顯示被執行方法的結果

    6、代碼:

        6.1 代碼中的控件說明:

    控件

    名稱

    說明

    TextBox

    txtSelect

    用於顯示被選擇文件的路徑

    Button

    btnSelectFile

    用於選擇文件

    TextBox

    txtResult

    用於顯示後台程序執行的結果

    ProgressBar

    pgbValue

    用於顯示背景程序執行的結果

    Button

    btnRun

    用於執行背景程序

    Button

    btnCancel

    用於取消正在執行的背景程序


        6.2代碼(下面代碼作用是將文件轉成swf):
    using System.ComponentModel;
    using System.IO;

    namespace BackgroundWorkerDemo
    {
        
    public partial class Form1 : Form
        {
            
    public Form1()
            {
                InitializeComponent();

                
    //“執行背景程序”按鈕事件
                btnRun.Click += new EventHandler(btnRun_Click);
                
    //“取消背景程序”按鈕事件
                btnCancel.Click += new EventHandler(btnCancel_Click);

                
    //是否允許BackgroundWorker 能否报告进度
                bgwWorker.WorkerReportsProgress = true;

                
    //選擇文件按鈕方法
                btnSelectFile.Click += new EventHandler(btnSelectFile_Click);


                
    //5.2
                //开始执行后台操作時
                
    //当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递DoWorkEventArgs参数;
                bgwWorker.DoWork += new DoWorkEventHandler(bgwWorker_DoWork);
                
    //引发 ProgressChanged 事件。 ProgressChanged是负责报告当前程序进度
                bgwWorker.ProgressChanged += new ProgressChangedEventHandler(bgwWorker_ProgressChanged);
                
    //当后台操作已完成、被取消或引发异常时发生。
                bgwWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwWorker_RunWorkerCompleted);
                      
            }

            
    /// <summary>
            
    /// 被選擇的文件
            
    /// </summary>
            string sFile = "";

            
    /// <summary>
            
    /// ProgressBar的值
            
    /// </summary>
            int iProgressValue = 1;


            String fs_filename 
    = "";
            
    /// <summary>
            
    /// 得到轉換后文件在服務器的絕對路徑
            
    /// </summary>
            String fs_convertedfilename = "";

            
    /// <summary>
            
    /// 得到選項選擇的結果(0為瀏覽)
            
    /// </summary>
            int interfaceOptions = 0;

            
    /// <summary>
            
    /// 選擇文件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void btnSelectFile_Click(object sender, EventArgs e)
            {
                
    //選擇文件
                OpenFileDialog ofdDialog = new OpenFileDialog();  
                
    if (ofdDialog.ShowDialog()==DialogResult.OK)
                {
                    sFile 
    = ofdDialog.FileName;           
                    
    string sFilePathName = Path.GetDirectoryName(sFile) +"\\"+ Path.GetFileNameWithoutExtension(sFile);
                    txtSelect.Text 
    = sFile;

                    fs_filename 
    = sFile;
                    
                    
    //得到轉換后的文件名
                    fs_convertedfilename = sFilePathName + ".swf";
                }
            }

            
    /// <summary>
            
    /// “執行背景程序”按鈕事件的方法
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void btnRun_Click(object sender, EventArgs e)
            {
                
    string sFile = "";
                
    //开始执行任务,會触发DoWork事件
                bgwWorker.RunWorkerAsync(sFile);
            }


            
    /// <summary>
            
    /// “取消背景程序”按鈕事件的方法
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void btnCancel_Click(object sender, EventArgs e)
            {
                
    if (bgwWorker.IsBusy)
                {
                    
    //取消操作
                    bgwWorker.CancelAsync();
                    txtResult.Text 
    += "已取消";
                }
            }

     

            
    /// <summary>
            
    /// 开始执行后台操作時
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void bgwWorker_DoWork(object sender, DoWorkEventArgs e)
            {
                BackgroundWorker bgwValue 
    = (BackgroundWorker)sender;

                
    //報告進度(進度值需自己傳入)
                bgwWorker.ReportProgress(iProgressValue);

                
    //5.3
                 //運行需要運行的方法。

                 RunPrint2Falsh();
                
    if ( RunPrint2Falsh()==true)
                {
                    bgwWorker.ReportProgress(
    100);
                }
            }

      
            
    /// <summary>
            
    /// 背景程序进度方法
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void bgwWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                
    //5.4
                //
    設置ProgressBar設
                pgbValue.Value = e.ProgressPercentage;
      
            }

            
    /// <summary>
            
    /// 背景程序運行完成事件方法
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            void bgwWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //5.5
                txtResult.Text 
    += "完成!";            
            }

            
    /// <summary>
            
    /// 運行將文件轉換成Flash程序(此處引用了Print2Flash控件)
            
    /// </summary>
            
    /// <returns></returns>
            private bool RunPrint2Falsh()
            {
                
    bool sRetrun = false;
                
    try
                {
                    P2F.Server2 p2fServer 
    = new P2F.Server2();
                    p2fServer.DefaultProfile.InterfaceOptions 
    = interfaceOptions;
                    p2fServer.ConvertFile(fs_filename, fs_convertedfilename, 
    nullnullnull);
                    sRetrun 
    = true;
                }
                
    catch (Exception ex)
                {                
                    
    throw ex;
                }
                
    return sRetrun;
            }
        }
    }
  • 相关阅读:
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/scottckt/p/1188974.html
Copyright © 2011-2022 走看看