利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)
利用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来来控制异步调用的打印的线程的暂停和恢复(转)的更多相关文章
- ManualResetEvent实现线程的暂停与恢复
背景 前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果.当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新. 分析这个需求,发现需要 ...
- 利用回调实现Java的异步调用
异步是指调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通知调用者,或通过回调函数处理这个调用. 回调简单地说就是B中有一个A,这样A在调用B的某个方法时实际上是调用到了自己的方法. 利 ...
- 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...
- 5种必会的Java异步调用转同步的方法你会几种
转载请注明本文地址:https://www.jianshu.com/p/f00aa6f66281 源码地址:https://gitee.com/sunnymore/asyncToSync Sunny先 ...
- Spring Boot使用@Async实现异步调用:自定义线程池
前面的章节中,我们介绍了使用@Async注解来实现异步调用,但是,对于这些异步执行的控制是我们保障自身应用健康的基本技能.本文我们就来学习一下,如果通过自定义线程池的方式来控制异步调用的并发. 定义线 ...
- Java异步调用转同步的5种方式
1.异步和同步的概念 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 2 .异步转为同步的概率 需要 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- MacOS和iOS开发中异步调用与多线程的区别
很多童鞋可能对Apple开发中的异步调用和多线程的区别不是太清楚,这里本猫将用一些简单的示例来展示一下它们到底直观上有神马不同. 首先异步调用可以在同一个线程中,也可以在多个不同的线程中.每个线程都有 ...
- C#异步调用的应用实践浅谈
C#异步调用的应用实践最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用C#异 ...
随机推荐
- Flex帮助文档ASDoc
首先,我们一般会对类文件的类和成员以及成员函数做一些解析性说明.那么这个解析性说明应该怎么写呢?如果想给指定的类.成员属性.成员函数加上注释,可以在这些声明的顶部按照下面的格式属性注释: (在flas ...
- 使用BeanUtils工具类操作Java bean
1.类的属性: 1).在Java EE中,类的属性通过setter和getter定义:类中的setter(getter)方法去除set(get)后剩余的部分就是类的属性 2).而之前叫的类的属性,即成 ...
- J-Link clone问题
在上一篇<修复山寨版的J-Link>,中已经介绍了恢复的步骤. 但是,在使用J-Link驱动(V4.94J)升级后,会出现下面情况. The connected emulator is a ...
- Mac下导出chrome插件
chrome最强大的功能之一就是插件,有时候需要给小伙伴们共享一些插件,所以需要将自己chrome中的插件打包,在mac下打包插件还是挺费劲的,在此记录. 打开chrome的扩展程序,找到要导出的插件 ...
- 小杨同学git使用记(适合使用过git但是不熟练的童鞋)
首先声明:这不是一篇git使用手册或者指南,如果要详细的git使用指南,下面是廖雪峰的git教程,可以系统学习廖雪峰的git教程,当然,如果你想马上以一种正确的方式使用git,那么接下来你很快就会学会 ...
- WEB-INF下jsp跳转
今天才知道:浏览器是不允许直接访问WEB-INF文件夹的 瞬间感觉自己好shi的有没有,纠结了2天 看来还得通过springMVC来跳,,,
- Deep Learning(深度学习)学习笔记整理(二)
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- java并发编程-读写锁
最近项目中需要用到读写锁 读写锁适用于读操作多,写操作少的场景,假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以 ...
- 深入学习微框架:Spring Boot(转)
转:http://www.infoq.com/cn/articles/microframeworks1-spring-boot/ 相关参考: https://spring.io/guides/gs/s ...
- PHPDocument 代码注释规范总结
PHPDocument 代码注释规范 1. 安装phpDocumentor(不推荐命令行安装)在http://manual.phpdoc.org/下载最新版本的PhpDoc放在web服务器目录下使得通 ...