BackgroundWorker主要用来提供后台运算服务(防止用户前台无响应等待),并提供服务进度的类;

代码如下:

 BackgroundWorker  bgw = new BackgroundWorker();
bgw.DoWork += bgw_DoWork;
bgw.RunWorkerAsync();
bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;
//创建对象 void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
bgw.Dispose();
CommonIdCardRead.CVR_CloseComm();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
} void bgw_DoWork(object sender, DoWorkEventArgs e)
{
try
{
while (true)
{
if ((iRetCOM == ) || (iRetUSB == ))
{
int authenticate = CommonIdCardRead.CVR_Authenticate();
if (authenticate == )
{
int readContent = CommonIdCardRead.CVR_Read_Content();
if (readContent == )
{
FillData();
}
else
{
this.Dispatcher.Invoke(new Action(delegate() { CMessageBox.ShowInfoMessage("读卡操作失败!"); }));
//CMessageBox.ShowInfoMessage("读卡操作失败!");
}
}
//else
//{
// this.Dispatcher.Invoke(new Action(delegate() { CMessageBox.ShowInfoMessage("未身份证或身份证放置不正确,请将身份证重新放置。"); }));
//}
}
else
{
if (readSb < )
this.Dispatcher.Invoke(new Action(delegate() { CMessageBox.ShowInfoMessage("初始化失败!"); }));
readSb++;
}
if (reBack)
return;
Thread.Sleep();
}
}
catch (Exception ex)
{
this.Dispatcher.Invoke(new Action(delegate() { CMessageBox.ShowInfoMessage(ex.ToString()); }));
}
}

此代码主要是后台不停读取身份证信息,同时不影响用户前台操作,但是,注意事项有两个:

1、前台元素无法在子线程中直接使用,(提示元素被其他线程使用)

2、当为死循环时候,页面关闭,线程仍然再继续运行。

关于这两个问题,解决办法如下:

1、this.Dispatcher.Invoke(new Action(delegate() { CMessageBox.ShowInfoMessage("初始化失败!"); }));用这种方法可以通过主进程调用相关的控件元素等,
CMessageBox.ShowInfoMessage("初始化失败!"); 为要执行的操作。
2、添加外部标识符位,在死循环中判断标识符状态,标示符改变,则跳出死循环,完成complate操作。
BackgroundWorker目前更多的用在进度条显示方面,
BackgroundWorker有是否进度通知属性,和进度改变事件,通过这两个可以在前台动态的显示后台运算业务的完成进度情况
 

BackgroundWorker用法的更多相关文章

  1. C#backgroundWorker用法

    1.在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作. ...

  2. winform异步系统升级—BackgroundWorker

    BackgroundWorker用法实例 自己的代码,就是要执行的代码写到dowork里,ProgressChanged事件是控制进度时用的,最后的Completed事件进度完成,也就是dowork里 ...

  3. BackgroundWorker简单实用(简便的异步操作)

    微软提供了一个快捷使用多线程的帮助类BackgroundWorker,能够快速创建一个新的线程,并能报告进度,暂停,以及在线程完成后处理别的任务. 1.BackgroundWorker类介绍 1.1. ...

  4. C# 根据BackgroundWoker异步模型和ProgressBar控件,自定义进度条控件

    前言 程序开发过程中,难免会有的业务逻辑,或者算法之类产生让人能够感知的耗时操作,例如循环中对复杂逻辑处理;获取数据库百万乃至千万级数据;http请求的时候等...... 用户在使用UI操作并不知道程 ...

  5. BackgroundWorker的简单用法

    微软的官方例子 BackgroudWorker就是一个封装好的异步处理类(就是多线程,广泛用于winform开发中) 例子: 1.界面效果: 一个label,两个button 2.Form2.cs的代 ...

  6. C#在后台运行操作:BackgroundWorker的用法

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  7. C#之BackgroundWorker从简单入门到深入精通的用法总结

    需求分析 经常用到的耗时操作,例如: 1.文件下载和上载(包括点对点应用程序传输文件,从网络下载文件.图像等)2.数据库事务(从数据库读到大量的数据到WinForm界面中的DataGridview里呈 ...

  8. winform BackgroundWorker 的用法 - 异步执行

    1.设置 backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation = ...

  9. C# BackgroundWorker 详解

    在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...

随机推荐

  1. Direct3D 11的资源

    资源(Resource) 如果把渲染流水线比喻成汽车装配线,资源就是流水线上需要输入的东西. 资源可分为两类:Textures(纹理)和Buffers(缓冲区). Textures可以简单地分为1维, ...

  2. 【leetcode】Merge k Sorted Lists(按大小顺序连接k个链表)

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  3. windows下体验Redis

    Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

  4. [Redux] Extracting Presentational Components -- AddTodo

    The code to be refactored: let nextTodoId = 0; class TodoApp extends Component { render() { const { ...

  5. [Redux] Extracting Container Components -- VisibleTodoList

    Code to be refacted: const TodoList = ({ todos, onTodoClick }) => ( <ul> {todos.map(todo =& ...

  6. UVa 10701 - Pre, in and post

    题目:已知树的前根序,中根序遍历转化成后根序遍历. 分析:递归,DS.依据定义递归求解就可以. 前根序:根,左子树,右子树: 中根序:左子树,根,右子树: 每次,找到根.左子树.右子树,然后分别递归左 ...

  7. OpenMp 基本

      OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Di ...

  8. RHEL-resolv.conf文件修改后重启被还原

    修改resolve.conf文件之后,reboot或service restart network时,修改的内容被还原.关闭NetworkManager即可.# chkconfig |grep Net ...

  9. C#基础:C#4.0权威指南 杂笔一

    1.c#中数组初始化的几种不同用法     int[] name = new int[NUM];       int[] name = {1, 2, 3, 4, 5, 6};       int[] ...

  10. .NET 4.0 兼容 .NET 2.0 的方法

    使用.net开发桌面应用,广大亲门最头疼的莫过于客户端部署的问题.基于.net 2.0 的winfrom程序因为 Framework 的分发包大小为20M左右还好解决,不幸的是如果项目中使用了Wcf, ...