LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# BackgroundWorker 后台异步组件

admin
2024年1月13日 17:10 本文热度 483

摘要

BackgroundWorker 是一个重要的 Windows 应用程序开发组件,它允许你在后台执行耗时的操作,而不会阻塞应用程序的主 UI 线程。通过使用 BackgroundWorker,你可以使你的应用程序更加灵活,更加高效。

BackgroundWorker 组件是通过委托和异步编程技术实现的。你可以在组件的主类中定义一个辅助方法,该方法会在后台执行,同时不会阻塞调用线程。这些辅助方法是异步的,因此它们不会阻塞 UI 线程。相反,调用线程可以继续执行其他任务,直到异步方法完成。

一旦你定义了一个辅助方法,你可以使用 RunWorkerAsync 方法将其作为异步任务提交给 BackgroundWorker。在调用该方法时,BackgroundWorker 将创建一个线程池线程来执行辅助方法。在辅助方法运行时,调用线程将继续执行其他任务,而不会阻塞。

当辅助方法完成时,BackgroundWorker 将引发一个事件。这个事件是可选的,但它可以包含有关辅助方法运行的信息,例如耗时,状态和错误消息。如果你不需要事件,你可以使用 RunWorkerCompleted 方法立即结束任务。

BackgroundWorker 是一个非常有用的组件,它可以帮助你编写高效的异步代码。它使你能够在后台执行耗时的操作,而不会阻塞 UI 线程,这对于实现响应式和流畅的应用程序非常重要。无论你是编写 Web 应用程序,移动应用程序还是桌面应用程序,BackgroundWorker 都是一个值得使用的工具。

正文


属性



CancellationPending获取一个值,指示应用程序是否已请求取消后台操作。
CanRaiseEvents获取一个指示组件是否可以引发事件的值。
Events获取附加到此 Component 的事件处理程序的列表。
IsBusy获取一个值,指示 BackgroundWorker 是否正在运行异步操作。
WorkerReportsProgress获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。
WorkerSupportsCancellation获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。

方法



CancelAsync()请求取消挂起的后台操作。
OnDoWork(DoWorkEventArgs)引发 DoWork 事件。
OnProgressChanged(ProgressChangedEventArgs)引发 ProgressChanged 事件。
OnRunWorkerCompleted(RunWorkerCompletedEventArgs)引发 RunWorkerCompleted 事件。
ReportProgress(Int32)引发 ProgressChanged 事件。
ReportProgress(Int32, Object)引发 ProgressChanged 事件。
RunWorkerAsync()开始执行后台操作。
RunWorkerAsync(Object)开始执行后台操作。

实例化

//实例化BackgroundWorkerprivate BackgroundWorker bgWorker = new BackgroundWorker();


初使化

private void FrmMain_Load(object sender, EventArgs e)
{
    pbar.Maximum = 1000;
    //是否报告处理进度
    bgWorker.WorkerReportsProgress = true;
    //是否允许取消操作
    bgWorker.WorkerSupportsCancellation = true;
    //执行三个事件,DoWork事件,ProgressChanged事件以及RunWorkedCompleted事件
    bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
    bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);
    bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);
}


事件

public void bgWorker_DoWork(object sender, DoWorkEventArgs e){    //设置进度条Maximum为1000,循环1000次    for (int i = 0; i <= 1000; 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){    //e.ProgressPercentage是获取任务int类型    pbar.Value = e.ProgressPercentage;    lblTitle.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.lblTitle.Text = "处理完毕!";    else        this.lblTitle.Text = "处理终止!";}
//开始private void btnStart_Click(object sender, EventArgs e){    //正忙时不允许继续操作    if (bgWorker.IsBusy)        return;    //异步开启    bgWorker.RunWorkerAsync("start");}
//停止private void btnStop_Click(object sender, EventArgs e){    bgWorker.CancelAsync();}


该文章在 2024/1/13 17:10:02 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved