多线程--Task,等待用户输入AutoResetEvent
上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5。 4.0也行,但不成熟。Thread引用2.0就够了。
1.通过构造函数创建的task,必须手动Start,而通过工厂创建的Task直接就启动了。
var task1 = new Task(() => { }); task.Start(); var task2 = Task.Factory.StartNew(() =>{ }); Task[] tasks = new Task[]; var tasks[] = Task.Factory.StartNew(() =>{ }); var tasks[] = Task.Factory.StartNew(() => { }); . task1.Status:Created;WaitingToRun; RanToCompletion; . task1.Wait(); Task.WaitAll(task1, task2); Task.WaitAny(task1, task2); . var result = task1.ContinueWith<string>(task => { }); //<>里为task返回值类型。 . 取消: var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; var task = Task.Factory.StartNew(() =>{if (token.IsCancellationRequested) { return;} //执行的内容。}, token); token.Register(() => { Console.WriteLine("Canceled"); }); tokenSource.Cancel(); 例2:CancellationTokenSource cts =new CancellationTokenSource(); Task<int> t=new Task<int>(() =>Add(cts.Token),cts.Token); //Add(CancellationToken ct)为执行的任务 t.Start(); t.ContinueWith(TaskEnded);//TaskEnded为完成时执行的任务
三、任务工厂TaskFactory:和Task.Factory类似。但TaskFactory能共享任务状态,如把CancellationTokenSource共享,就可以同时取消一组任务。
CancellationTokenSource cts = new CancellationTokenSource(); TaskFactory taskFactory = new TaskFactory(); Task[] tasks = new Task[] { taskFactory.StartNew(() => Add(cts.Token)), taskFactory.StartNew(() => Add(cts.Token)), taskFactory.StartNew(() => Add(cts.Token)) }; //CancellationToken.None指示TasksEnded不能被取消 taskFactory.ContinueWhenAll(tasks, TasksEnded, CancellationToken.None); Console.ReadKey(); cts.Cancel(); Console.ReadKey(); // TasksEnded(Task[] tasks)为取消时执行的内容。 // ContinueWhenAll和ContinueWhenAny方法,是一组任务完成后执行。
参考文献:
http://blog.csdn.net/djc11282/article/details/17524013
http://www.cnblogs.com/luminji/archive/2011/05/13/2044801.html
http://www.wxzzz.com/689.html
二、使用AutoResetEvent实现等待用户输入后执行:
private void button1_Click(object sender, EventArgs e) {
Thread th = new Thread(YourThread);
th.Start();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length >= )
{
detailCollectedEvent.Set(); // 当textBox1的文本超过4位,发一个通知
}
}
AutoResetEvent detailCollectedEvent = new AutoResetEvent(false);
void YourThread()
{
MessageBox.Show("input you bank account details into the textbox");
detailCollectedEvent.WaitOne(); // 等候通知
MessageBox.Show("we will keep the secret.");
}
本来想写一个挂Q的工具,所以才研究了一下以上内容,因为挂Q必须采用多线程工厂模式TaskFactory。而且需要输入验证码,就要用等待用户输入 AutoResetEvent,但后来发现有比较完善的挂Q工具了,所以就没继续写,http://www.qyisoft.com/ 奇易WebQQ挂Q工具
本文由正态分布X~N(μ,σ2 ) QQ2052702900写于2015年8月21日。
【注】所有文字,均为个人学习总结,仅当个人留存。若君不幸踏访,切勿讥讽,确有可取之处,不妨随心借取,确有错漏之处,还望不吝赐教。
多线程--Task,等待用户输入AutoResetEvent的更多相关文章
- 练习:等待用户输入input()
等待用户输入 执行下面的程序在按回车键后就会等待用户输入: 实例(Python 3.0+) #!/usr/bin/python3 input("\n\n按下 enter 键后退出." ...
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
using System; using System.Text; using System.Windows.Forms; using System.Threading; namespace Windo ...
- Jquery 搜索等待用户输入完成时自动执行
$('#fuzzySearchBox').on('keyup', function (event) { var searchStr = $(this).val().toLowerCase(); //i ...
- acedGetString获取用户输入字符串
acedGetString()[ads_getstring()]int acedGetString(int cronly, const TCHAR *prompt, TCHAR *psz) acedG ...
- 用户输入与while循环
函数input()的工作原理: 函数input()让程序短暂运行,等待用户输入一些文本,获取用户输入后将其存储在一个变量中 测试input()功能-- #!/usr/bin/env python#fi ...
- 《Linux命令行与shell脚本编程大全》第十四章 处理用户输入
有时还会需要脚本能够与使用者交互.bash shell提供了一些不同的方法来从用户处获得数据, 包括命令行参数,命令行选项,以及直接从键盘读取输入的能力. 14.1 命令行参数 就是添加在命令后的数据 ...
- Python编程从入门到实践笔记——用户输入和while循环
Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...
- python入门学习:6.用户输入和while循环
python入门学习:6.用户输入和while循环 关键点:输入.while循环 6.1 函数input()工作原理6.2 while循环简介6.3 使用while循环处理字典和列表 6.1 函数in ...
- 第七章 用户输入和while语句
大多数编程都旨在解决最终用户的问题,为此通常需要从用户那里获取一些信息.例如,假设有人要判断自己是否到了投票的年龄,要编写回答这个问题的程序,就需要知道用户的年龄,这样才能给出答案.因此,这种程序需要 ...
随机推荐
- C++中STL容器的比较
基本参考 https://blog.csdn.net/qq_14898543/article/details/51381642 容器特性: vector:典型的序列容器,C++标准严格要求次容器的实现 ...
- Vim常用命令(转)—默写版
1.光标移动 上: 下: 左: 『字母小写』 右: 上一行行首: 『减号』 下一行行首: 行首: 『数字0』 行尾: 单词词尾或后一个单词词尾: 后一个单词词首: 单词词首或前一个单词词首: 跳转到特 ...
- windows系统安装mysql压缩zip版
1.下载 打开官网:https://www.mysql.com 进入DOWNLOADS--->Community--->MySQL Community Server,选择系统对应的版本点击 ...
- Dubbo 用户手册学习笔记 —— Dubbo架构
Dubbo的架构 节点角色说明 节点 角色说明 Provider 服务提供方 Consumer 服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监 ...
- Path Sum I&&II
I Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...
- Efficient Graph-Based Image Segmentation
转:http://blog.csdn.net/asongoficeandfire/article/details/8434799 Efficient Graph-Based Image Segment ...
- 利用SQL SERVER对比两张表的数据一致性
CREATE TABLE [dbo].[A]( [ID] [int] NULL, [NAME] [varchar](50) NULL, [SEX] [varchar](50) NUL ...
- NOI2014 起床困难综合症 day1t1
感觉NOI题在向简单方向发展,或者说明年会难到暴呢? 直接模拟啊,枚举每个二进制数位,看经过变换之后是否为1及为1的条件即可.\( O(nlogm)\). 然后...跪了一个点,第五个死活比标准大一. ...
- AC日记——[USACO10MAR]仓配置Barn Allocation 洛谷 P1937
[USACO10MAR]仓配置Barn Allocation 思路: 贪心+线段树维护: 代码: #include <bits/stdc++.h> using namespace std; ...
- H264与AAC ES打包成MP4
注意 设置图像的sps pps MP4AddH264SequenceParameterSet(file,video,sps,sizeof(sps)); MP4AddH264PictureParamet ...