Winfrom BackgroundWorker
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Threading;
using System.Windows.Forms; namespace BackgroundWorkerExplore
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} #region 异步处理
//002
private int RetrieveData(BackgroundWorker worker, DoWorkEventArgs e)
{
int max = (int)e.Argument;
int percent = 0;
for (int i = 1; i <= max; i++)
{
if (worker.CancellationPending) return i; percent = (int)(((double)i / (double)max) * 100);
// 摘要:
// 引发 System.ComponentModel.BackgroundWorker.ProgressChanged 事件。
// percentProgress: 已完成的后台操作所占的百分比,范围从 0% 到 100%。
// userState:/ 传递到 System.ComponentModel.BackgroundWorker.RunWorkerAsync(System.Object) 的状态对象。
worker.ReportProgress(percent, new KeyValuePair<int, string>(i, Guid.NewGuid().ToString()));
Thread.Sleep(500);
} return max;
}
//001 首先执行dowork
private void bgworker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
e.Result = RetrieveData(this.bgworker, e);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
} //003
private void bgworker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
KeyValuePair<int, string> record = (KeyValuePair<int, string>)e.UserState;
//操作UI
this.labelResultLeft.Text = string.Format("There are {0} records retrieved!", record.Key);
this.progressBarLeft.Value = e.ProgressPercentage;
this.lvLeft.Items.Add(record.Value);
} //004所有操作执行完后执行
private void bgworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
this.labelResultLeft.Text = string.Format("Total records: {0}", e.Result);
this.btnStart.Enabled = true;
this.btnStop.Enabled = false;
}
catch (TargetInvocationException ex)
{
MessageBox.Show(ex.InnerException.GetType().ToString());
}
}
#endregion private void btnStart_Click(object sender, EventArgs e)
{
if (this.bgworker.IsBusy) return; this.lvLeft.Items.Clear();
int MaxValue = 10;
this.bgworker.RunWorkerAsync(MaxValue);
this.btnStart.Enabled = false;
this.btnStop.Enabled = true;
} private void btnStop_Click(object sender, EventArgs e)
{
this.bgworker.CancelAsync();
}
}
}
运行效果:
Winfrom BackgroundWorker的更多相关文章
- BackgroundWorker实现的winfrom中实现异步等待加载图片显示
BackgroundWorker简介 BackgroundWorker在winfrom中有对应控件,该有三个事件:DoWork .ProgressChanged 和 RunWorkerCompl ...
- 实现winfrom进度条及进度信息提示,winfrom程序假死处理
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- 实现winfrom进度条及进度信息提示
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- [转] 实现winfrom进度条及进度信息提示,winfrom程序假死处理
china_xuhua 原文地址 1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线 ...
- C# BackgroundWorker 详解
在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...
- 【Winform】使用BackgroundWorker控制进度条显示进度
许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...
- C# 多線程&BackgroundWorker概念入門教程
感謝以下各位作者的貢獻~ 百度經驗舉了個例子,很好理解BackgroundWorker的用途(主要是用來啟動後台線程,而不阻塞調用程式的運行),收藏一下 http://jingyan.baidu.c ...
- 【C#】【Thread】BackgroundWorker的使用
BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...
- winfrom 隐藏任务栏(win7)
1:新建winfrom 窗体应用程序 2:拖入contextMenuStrip.notifyIcon 2个控件 3:如图 4:code: 注意:复制控件事件要注册 using System; usin ...
随机推荐
- Spring Boot 与 swagger 结合
. 配置pom.xml 2. 更改端口号, 在src/main/resources 下面添加一个application.yml文件. 3. 添加一个ModelCase entity. 4. 添加一个i ...
- 简单透析cookies,sessionStorage和localStorage
首先大致说一下 1.sessionStorage是会话层的一种存储方式,当会话关闭或者退出,sessionStorage就会被清除,有效期较短 2.localStorage是浏览器提供的本地存储方式, ...
- Vue的计算属性,监视属性代码理解
1.计算属性:在computed属性对象中定义计算属性的方法,在页面中使用{{方法名}}来显示计算的结果 //计算属性 computed:{ // 计算属性值的一个方法,方法的返回值是属性值,初始化显 ...
- windows 10安装docker一直挂起在Installing Components and Removing Files
碰到这个问题百度了好久都没有找到解决方式,什么用管理员方式运行,给文件夹权限啊,都不好使. 后面在bing上面搜docker install compoents关键字找到一条结果,如下如 点进链接,内 ...
- 关于shell命令的一些用法和技巧
#!/bin/bash #第一种写法 #date=`date "+%Y-%m-%d %H:%M:%S"` #第二种写法 date=$(date "+%Y-%m-%d %H ...
- anaconda3下64位python和32位python共存
查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不 ...
- [亲身实践]linux命令行下配置网路
1.在命令行下输入setup, 2.之后出现下图,选择网络配置 4.配置IP地址,子网掩码,DNS 5.保存之后回到命令行模式下,输入service network restart,至此网络配置完成
- temporal credit assignment in reinforcement learning 【强化学习 经典论文】
Sutton 出版论文的主页: http://incompleteideas.net/publications.html Phd 论文: temporal credit assignment i ...
- webpack前端开发环境搭建
要搭建webpack开发环境,首先要安装NodeJS,后面的过程均在NodeJS已经安装的基础上进行. 1. 首先建立一个工程目录,命名为,其目录结构如下: 其中dist目录用于存放生成的文件,src ...
- [LeetCode&Python] Problem 235. Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...