private void button1_Click(object sender, EventArgs e){//定义一个为可取消资源标志CancellationTokenSource cts = new CancellationTokenSource();//定义二个为可取消资源标志CancellationTokenSource cts1 = new CancellationTokenSource();//实现一个可取消操作的回调函数,ThreadPool.QueueUserWorkItem(o => Count(cts.Token, 1000000));//为可取消资源标志注册取消后的回调函数(无参,无返回值,匿名委托)cts.Token.Register(() => Console.WriteLine("Canceled 1"));            //为可取消资源标志注册取消后的回调函数(有参,无返回值,显式申明委托)cts.Token.Register(o => TestCancellationMethead(1000, 10), true);cts1.Token.Register(() => Console.WriteLine("Canceled 2"));///连接两个可取消资源标志var LinkedCts = CancellationTokenSource.CreateLinkedTokenSource(cts.Token, cts1.Token);///给连接后的可取消资源标志集注册回调函数(匿名委托),集合中任意一个可取消资源标志取消,都将触发该回调函数LinkedCts.Token.Register(() => Console.WriteLine("linkedCts canceled"));Thread.Sleep(300);cts.Cancel();}void TestCancellationMethead(int x, int y){Console.WriteLine("取消后的回调函数" + x + y);}/// <summary>/// 一个可取消操作的回调函数,函数的关键是传入一个CancellationToken对象/// </summary>/// <param name="token"></param>/// <param name="countTo"></param>void Count(CancellationToken token, Int32 countTo){Console.WriteLine("一个可取消的操作开始执行");for (int count = 0; count < countTo; count++){if (token.IsCancellationRequested){Console.WriteLine("$" + count.ToString());Console.ReadLine();break;}Console.WriteLine("|" + count.ToString());Console.ReadLine();}}

        bool IsCancellationRequested = false;private void button2_Click(object sender, EventArgs e){ThreadPool.QueueUserWorkItem(o => Count(1000000));Thread.Sleep(300);IsCancellationRequested = true;}void Count(Int32 countTo){Console.WriteLine("一个可取消的操作开始执行");for (int count = 0; count < countTo; count++){if (IsCancellationRequested){Console.WriteLine("一个可取消的操作被取消" + count.ToString());break;}Console.WriteLine(count.ToString());}}

转载于:https://www.cnblogs.com/wuhuisheng/p/5555563.html

C# 实现一个可取消的多线程操作 示例相关推荐

  1. html中全选按钮代码怎么写,html中的javascript 全选/取消全选操作示例代码

    复制代码代码如下: 无标题文档 function selectAllDels() { var allCheckBoxs = document.getElementsByName("preDe ...

  2. PostgreSQL 的一个简单连接和查询操作——示例

    表和数据: CREATE TABLE weather (city varchar(80),temp_lo int, -- low temperaturetemp_hi int, -- high tem ...

  3. C#多线程操作界面控件的解决方案

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  4. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock

    本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...

  5. BackgroundWorker 实现多线程操作

    背景介绍 在做程序的过程中,我们很可能遇到这样的情况:当我们执行一个比较耗时的操作,即界面加载数据量略大的时,在该操作未完成之前再去操作界面,就会出现停止响应的情况,这称为界面假死状态,那一个小圆圈转 ...

  6. FMDatabaseQueue 数据库多线程操作、事务处理

    SQLite数据库多线程操作: 在上面一节中已经讲过FMDB的用法了,接下来讲讲sqlite在都线程中的用法.如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安 ...

  7. 05 ORA系列:ORA-01013 报错用户请求取消当前的操作

    如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看<ORACLE系列异常总结ORA>. java.sql.SQLTimeoutException: ORA-01013: ...

  8. Shell多线程操作及线程数控制实例

    来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...

  9. python多线程读取数据库数据_python多线程操作MySQL数据库pymysql

    python多线程操作MySQL数据库pymysql 项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, "),原因是pymysql的exec ...

最新文章

  1. LeetCode实战:字符串相乘
  2. c++类中成员的构造顺序
  3. Linux shell脚本基础学习详细介绍(完整版)一
  4. PYTHON 爬虫笔记七:Selenium库基础用法
  5. python 实现点击右键用某个程序打开功能_工欲善其事,必先利其器(1)——Python开发环境安装与配置...
  6. DataTable筛选某列最大值
  7. JavaScript实现斐波那契数列(Febonacci Array)
  8. java基本数据类型以及相关内容总结
  9. Windows Mobile 6.0 (1)
  10. 第三次作业代码规范修改
  11. python 批量改文件后缀_python如何批量修改文件后缀名?批量修改文件后缀名的方法...
  12. womic网络错误_WO Mic客户端下载_WO Mic Client(将手机变成电脑麦克风) 3.5 官方版_极速下载站...
  13. vue播放flv视频流
  14. 教你如何用Three.js创造一个三维太阳系
  15. Java Swing教程
  16. 服务器经常被攻击怎么办
  17. android改变系统语言,Android 9.0设置系统语言
  18. 大智慧财汇数据库l2接口的核心是什么?
  19. Java Resources是什么
  20. [移动硬盘]笔记本移动硬盘盒选择

热门文章

  1. Java如何避免重量级锁,Java 中锁是如何一步步膨胀的(偏向锁、轻量级锁、重量级锁)...
  2. stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂
  3. Character.isLetterOrDigit(ch)判断ch是否为字母或数字
  4. Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS
  5. linux ls 命令排序,如何在Linux中使用ls命令按大小对所有文件进行排序
  6. 【C++grammar】文件系统以及path类使用
  7. 超图软件试用许可操作步骤_软件中的操作步骤
  8. 操作系统中的多级队列调度
  9. 05-图像的平滑处理(不同的滤波操作)
  10. 汇编add和mov指令