博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Backgroundworker(后台线程)的使用
阅读量:6475 次
发布时间:2019-06-23

本文共 2582 字,大约阅读时间需要 8 分钟。

namespace BackgroundWorkderPauseSample{    public partial class MainForm : Form    {        BackgroundWorker worker = null;        public MainForm()        {            InitializeComponent();            Load += new EventHandler(Form1_Load);        }        void Form1_Load(object sender, EventArgs e)        {            worker = new BackgroundWorker();            worker.WorkerReportsProgress = true;            worker.WorkerSupportsCancellation = true;            worker.DoWork += new DoWorkEventHandler(worker_DoWork);            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);            worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);                    }        void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)        {            progressBar1.Value = e.ProgressPercentage;        }        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)        {            if (e.Cancelled)                MessageBox.Show("用户取消了操作");            else            {                MessageBox.Show("正常完成了操作");            }        }        void worker_DoWork(object sender, DoWorkEventArgs e)        {            for (int i = 0; i < 100; i++)            {                if (worker.CancellationPending)//如果用户申请取消                {                    for (int k = i; k >= 0; k--)                    {                        Thread.Sleep(10);                        worker.ReportProgress(k);//模拟一个回滚的效果                    }                    e.Cancel = true;                    return;                }                manualReset.WaitOne();//如果ManualResetEvent的初始化为终止状态(true),那么该方法将一直工作,直到收到Reset信号。然后,直到收到Set信号,就继续工作。                //反之亦然                Thread.Sleep(500);                worker.ReportProgress(i+1);            }        }        private void btStart_Click(object sender, EventArgs e)        {            worker.RunWorkerAsync();        }        private void btCancel_Click(object sender, EventArgs e)        {            worker.CancelAsync();        }        private ManualResetEvent manualReset = new ManualResetEvent(true);        private void btPause_Click(object sender, EventArgs e)        {            if (btPause.Text == "暂停")            {                manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞                btPause.Text = "继续";            }            else            {                manualReset.Set();//继续某个线程的工作                btPause.Text = "暂停";            }        }    }}

转载于:https://www.cnblogs.com/a849788087/p/5729122.html

你可能感兴趣的文章
easyui treegrid逐步加载
查看>>
GraphicsLab Project之辉光(Glare,Glow)效果 【转】
查看>>
<转>Python: __init__.py 用法
查看>>
Linux Curl命令
查看>>
046 SparlSQL中的函数
查看>>
Zookeeper 的 Lua 绑定(二)
查看>>
-27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found...
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
,net运行框架
查看>>
Java 中 Emoji 的正则表达式
查看>>
Mixin Network第一届开发者大赛作品介绍- dodice, diceos和Fox.one luckycoin
查看>>
安卓Glide(4.7.1)使用笔记 01 - 引入项目
查看>>
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
Flex布局
查看>>
Material Design之 AppbarLayout 开发实践总结
查看>>
Flutter之MaterialApp使用详解
查看>>
DataBinding最全使用说明
查看>>
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
白洋淀周末游
查看>>