利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复

    打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印

    打印过程中有2个线程:一个是程序运行的主线程,一个是异步调用的打印线程,需要实现的是在主线程中的控件(暂停打印按纽)来控制打印线程

                的暂停和恢复。

    ManualResetEvent就像一个信号灯,当有信号的时候(初始化为true或者有线程调用它的set()方法)就表示所有在等待(WaitOne())的线程,你们可以

    继续运行了,当没有信号的时候(初始化为false或者有线程调用它的Reset()方法)就表示所有在等待的线程,你们继续等着      

    下面是例子代码:

//程序开始的时候设置为有信号,这样当点击打印按纽的时候,就可以直接打印
static ManualResetEvent mre = new ManualResetEvent(true);
private void btnPrint_Click(object sender, EventArgs e)
{
//在打印按纽事件中异步调用打印方法,循环打印
//在打印循环体中有一个mre.WaitOne();当信号灯有信号的时候就继续
//当信号灯没有信号的时候就暂停
} //在控制暂停和继续的按纽事件中通过设置信号灯有和无来控制继续打印还是暂停打印
private void btnStopPrint_Click(object sender, EventArgs e)
{
if (btnStopPrint.Text == "暫停打印") {
mre.Reset();
btnStopPrint.Text = "繼續打印";
}
else if (btnStopPrint.Text == "繼續打印") {
mre.Set();
btnStopPrint.Text = "暫停打印";
}
}

    还有一个AotoResetEvent和ManualResetEvent类似,只是一个是自动,一个是手动。AotoResetEvent只允许一个线程获得信号,

    当一个线程获得该信号之后AotoResetEvent就会自动Reset()掉置为无信号

利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)的更多相关文章

  1. ManualResetEvent实现线程的暂停与恢复

    背景 前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果.当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新. 分析这个需求,发现需要 ...

  2. 利用回调实现Java的异步调用

    异步是指调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通知调用者,或通过回调函数处理这个调用. 回调简单地说就是B中有一个A,这样A在调用B的某个方法时实际上是调用到了自己的方法. 利 ...

  3. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  4. 5种必会的Java异步调用转同步的方法你会几种

    转载请注明本文地址:https://www.jianshu.com/p/f00aa6f66281 源码地址:https://gitee.com/sunnymore/asyncToSync Sunny先 ...

  5. Spring Boot使用@Async实现异步调用:自定义线程池

    前面的章节中,我们介绍了使用@Async注解来实现异步调用,但是,对于这些异步执行的控制是我们保障自身应用健康的基本技能.本文我们就来学习一下,如果通过自定义线程池的方式来控制异步调用的并发. 定义线 ...

  6. Java异步调用转同步的5种方式

    1.异步和同步的概念 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 2 .异步转为同步的概率 需要 ...

  7. C#委托异步调用

    参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...

  8. MacOS和iOS开发中异步调用与多线程的区别

    很多童鞋可能对Apple开发中的异步调用和多线程的区别不是太清楚,这里本猫将用一些简单的示例来展示一下它们到底直观上有神马不同. 首先异步调用可以在同一个线程中,也可以在多个不同的线程中.每个线程都有 ...

  9. C#异步调用的应用实践浅谈

    C#异步调用的应用实践最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用C#异 ...

随机推荐

  1. c/c++运算顺序问题

    发现没弄清楚这个问题的人很多,连我们c++老师都没弄清楚,转载一篇文章,以及C++ Primer原文. 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句 ...

  2. AX2012 常用表关系(客户地址,联系信息)

    //客户地址信息 static void CustAddressInformation(Args _args) { CustTable custTable; DirPartyTable dirPart ...

  3. c语言 sscanf()函数

    sscanf()函数用于从字符串中读取指定格式的数据,其原型如下:    int sscanf (char *str, char * format [, argument, ...]); [参数]参数 ...

  4. webform repeater控件

    Repeater: HeaderTemplate - 在加载开始执行一遍 ItemTemplate - 有多少条数据,执行多少遍 FooterTemplate - 在加载最后执行一遍 Alternat ...

  5. 对Web标准的理解。可用性和可访问性

    一Web标准 简单的说,就是HTML.CSS.JavaScript这三者分离.WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentat ...

  6. .net中自定义过滤器对Response内容进行处理

    原文:http://www.cnblogs.com/zgqys1980/archive/2008/09/02/1281895.html 代码DEMO:http://files.cnblogs.com/ ...

  7. LINUX下的拨号利器:wvdial和pppd —— 转载

    wvdial是LINUX下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网.在整个过程中wvdial的作用是拨号并等待提示,并根据提示输入相应的用户名和密码等认证信息:ppp的 ...

  8. Allegro16.3约束设置 (转载)

    原文地址:http://blog.chinaunix.net/uid-21198646-id-3212383.html 差分对的约束设置 第一步,差分对的设置 差分对的设置有很多方法,下面介绍两种最常 ...

  9. C语言课设心得分享(一)

    今儿上完课设,老师果然讲的比较少,周四还不用去,看来还是学生自己折腾.我在做课设的过程中,攒了一些心得/体会,希望能和大家分享分享,也希望能一起探讨探讨.如果是我能回答的问题,我很乐意能够提供帮助. ...

  10. crontab这个坑,执行单个命令执行成功,但是写到crontab怎么也不行

    昨天开始,一直在弄通过定时任务控制熄屏,在终端下的单个命令可以执行成功,写到脚本里,单个执行脚本能成功,但是写到crontab定时任务,怎么也不熄屏,但他确实执行了,看日志,是一直报错的:百度了很多很 ...