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. 【Cocos2d-X开发学习笔记】第19期:动作管理类(CCActionManager)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.动作管理类 动作管理类CCActionMan ...

  2. android布局属性具体解释

    RelativeLayout用到的一些重要的属性: 1:LinearLayout ( 线性布局 ) (里面仅仅能够有一个控件,而且不能设计这个控件的位置,控件会放到左上角) 线性布局分为水平线性和垂直 ...

  3. WAS集群系列(6):集群搭建:步骤4:安装WAS升级软件

    逐步点击"下一步",注意一处流程,例如以下列举: "升级软件"安装的路径设置,建议与之前的WAS及IHS安装的绝对路径同样,例如以下所看到的: 逐步点击,完毕安 ...

  4. Qt 5.4正式发布!引入WP,支持HTML5混合开发

    北京时间12月11日消息,Digia全资子公司The Qt Company在其 官方博客上宣布,正式发布Qt 5.4,支持HTML5混合开发,引入对于Windows Phone的支持,以及众多跨桌面. ...

  5. C# 异步和委托学习

    IAsyncResult是接口: IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 ...

  6. Unity 3D 动画帧事件

    前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的.假如主角在攻击NPC时,先实例化特效,后播放动画.动画毕竟是有一个时间长度的.等到动画播放攻击挥刀的那一瞬间时,特效可能早就 ...

  7. 将宿主机东西拷贝到dokcer容器中去

    1,获取容器名称或者id : docker ps 2,获取整个容器的id,其实键盘tag就可以补全的. docker inspect -f  '{{.Id}}'  步骤A获取的名称或者id 3,在主机 ...

  8. python学习-day3

    今天是第三天学习,加油! 第一部分 集合 一.集合 1.什么是集合以及特性? 特性:无序的,不重复的序列,可嵌套. 2.创建集合 方法一:创建空集合 s1 = set() print(type(s1) ...

  9. Geodatabase - 删除要素

    //删除要素类. //例如:workspacePath=@"G:\doc\gis\1.400\data\pdb.mdb", featureClassPath="res2_ ...

  10. VC防止程序被多次运行 互斥体方法

    BOOL CXXXApp::InitInstance() //函数内添加代码 HANDLE hMutex=CreateMutex(NULL,TRUE,"test"); // 用于检 ...