c#异步操作后台运行(backgroundworker类)示例

c#异步操作,BackgroundWorker类的使用,可以在后台运行需要的代码逻辑。

代码如下:

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

namespace TestBackgroundWork
{
    public partial class Form1 : Form
    {

public Form1()
        {
            InitializeComponent();
            InitializeBackgoundWorker();
        }

private BackgroundWorker backgroundWorker1;

private void InitializeBackgoundWorker()
        {
            this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
            this.backgroundWorker1.WorkerReportsProgress = true;
            this.backgroundWorker1.WorkerSupportsCancellation = true;
            this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
        }

//**********backgroundWorker1的回调函数**********
        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            for (int i = 1; i <= 10; i++)
            {
                if (worker.CancellationPending)
                {
                   e.Cancel = true;
                }
                else
                {
                    Thread.Sleep(500);
                    int percentComplete = (int)((float)i / (float)10 * 100);
                    worker.ReportProgress(percentComplete);
                }
            }
        }

void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;
        }

void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }
            else if (e.Cancelled)
            {
                resultLabel.Text = "Canceled";
            }
            else
            {
                resultLabel.Text = "Completed";
            }
            startBtn.Enabled = true;
            stopBtn.Enabled = false;
        }

//**********backgroundWorker1的回调函数**********

private void startBtn_Click(object sender, EventArgs e)
        {
            resultLabel.Text = String.Empty;
            this.startBtn.Enabled = false;
            this.stopBtn.Enabled = true;
            //启动异步操作.
            backgroundWorker1.RunWorkerAsync();
        }

private void stopBtn_Click(object sender, EventArgs e)
        {
            backgroundWorker1.CancelAsync();
        }
    }
}

(0)

相关推荐

  • C# BackgroundWorker用法详解

    在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完成.但是原生接口的线程操作有一些难度,如果要更进一步的去完成线程间的通信就会难上加难. 还好 .NET 类库中提供了一个叫做 BackgroundWorker 的类可以比较优雅的解决这类问题.虽然BackgroundWorker 类使用起来比较简单,但其中还是有一些需要注意的细节,下面我们就通过 d

  • C#在后台运行操作(BackgroundWorker用法)示例分享

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示,必要时还要控制后台线程中断当前操作. 以前,类似的应用会比较麻烦,需要写的代码较多,也很容易出现异常.在.net中,提供了一个组件BackgroundWorker就是专门解决这个问题的.BackgroundWorker类允许在单独的专用线程上运行操作. 耗时的操作(如下载和数据库事务)在长时间运行

  • C# BackgroundWorker组件学习入门介绍

    一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能. BackgroundWorker类允许您在单独的专用线程上运行操作.  耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态. 如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题(MSDN). 若要在后台执行耗时的操作,请创建一个

  • c#异步操作后台运行(backgroundworker类)示例

    c#异步操作,BackgroundWorker类的使用,可以在后台运行需要的代码逻辑. 复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Windows.Fo

  • Android编程判断当前应用是否在后台运行的方法示例

    本文实例讲述了Android编程判断当前应用是否在后台运行的方法.分享给大家供大家参考,具体如下: /** 判断程序是否在后台运行 */ public static boolean isRunBackground(Context context) { ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProc

  • Java实现创建运行时类的对象操作示例

    本文实例讲述了Java实现创建运行时类的对象操作.分享给大家供大家参考,具体如下: 获取运行时类的方法: public void test() throws ClassNotFoundException { /* * Class类是反射的源头 * 创建一个类,通过编译(javac.exe),生成对应的.class文件,之后使用java.exe加载(JVM的类加载器完成的)此.class文件. * 此.class文件加载到内存后,就是一个运行时类,存放在缓存区. * 那么这个运行时类本身就是一个C

  • C#中BackgroundWorker类用法总结

    目录 1.属性: WorkerReportsProgress  WorkerSupportsCancellation  CancellationPending  IsBusy  2.方法: RunWorkerAsync()  ReportProgress(IntpercentProgress)  CancelAsync()  3.事件: DoWork ProgressChanged RunWorkerCompleted 4.附源代码: 查询了一下MSDN文档,其中微软就BackgroundWor

  • C#使用后台线程BackgroundWorker处理任务的总结

    在一些耗时的操作过程中,在长时间运行时可能会导致用户界面 (UI) 处于停止响应状态,用户在这操作期间无法进行其他的操作,为了不使UI层处于停止响应状态,我们倾向推荐用户使用BackgroundWorker来进行处理,这个后台的线程处理,可以很好的实现常规操作的同时,还可以及时通知UI,包括当前处理信息和进度等,这个BackgroundWorker的处理在百度里面也是有很多使用的介绍,本篇随笔主要是做一些自己的使用总结,希望也能给读者提供一个参考. 在使用BackgroundWorker的过程中

  • C#中backgroundWorker类的用法详解

    1.在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作.新建线程可以用 Thread 类,可以实现多线程同时操作.简单的方法可以通过 BackgroundWorker 类实现. BackgroundWorker 可以用来更新UI界面,但是通常用来Progressbar(进度条)控件 例如更新UI private void Form1_Load(objec

  • Python脚本后台运行的几种方式

    一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: 复制代码 代码如下: python test1.py & 现在脚本正常运行,通过ps能看到进程号,此时直接关闭ssh终端(不是用exit命令,是直接通过putty的关闭按钮执行的), 再次登录后发现进程已经退出了. 通过后台启动的方式该问题已经解决,这里总结下,也方便我以后查阅. linux 下后台运行 通过fork实现 linux环境下,在c中守护进程

  • 浅析Linux中使用nohup及screen运行后台任务的示例和区别

    使用SSH终端(比如putty,xshell)连接Linux服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,我们还要做其他的任务呢,所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,有下面这些常用方法来实现这个需求. command & 在终端输入command &运行,这时候使用Ctrl + C中止命令将会失效,因为对&后台运行SIGINT1信号免疫,程序会继续运行. 但如果你直接关掉终端, 进程将跟着中止. 可见,使用&后台运行

  • Android 后台运行白名单实现保活

    保活现状 我们知道,Android 系统会存在杀后台进程的情况,并且随着系统版本的更新,杀进程的力度还有越来越大的趋势.系统这种做法本身出发点是好的,因为可以节省内存,降低功耗,也避免了一些流氓行为. 但有一部分应用,应用本身的使用场景就需要在后台运行,用户也是愿意让它在后台运行的,比如跑步类应用.一方面流氓软件用各种流氓手段进行保活,另一方面系统加大杀后台的力度,导致我们一些真正需要在后台运行的应用被误杀,苦不堪言. 优雅保活? 为了做到保活,出现了不少「黑科技」,比如 1 个像素的 Acti

随机推荐