时间:2016-02-15 21:39 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【如何取消.net后台线程的执行】,下面是详细的讲解!
如何取消.net后台线程的执行
public class Example
{
private static int Value;
public static void Main()
{
var autoResetEvent=new AutoResetEvent(false);
var cts=new CancellationTokenSource();
var state=new { ValueAvailableEvent=autoResetEvent, CancellationToken=cts.Token };
var threadConsumer=new Thread(ConsumerThreadWork);
var threadProducter=new Thread(ProducterThreadWork);
threadConsumer.Start(state);
threadProducter.Start(state);
while (true)
{
if (Console.ReadKey().KeyChar=='c')
{
Console.WriteLine("请求取消线程的执行");
cts.Cancel();
break;
}
}
Console.ReadLine();
}
public static void ProducterThreadWork(dynamic state)
{
var valueAvailableEvent=(AutoResetEvent)state.ValueAvailableEvent;
var cancellationToken=(CancellationToken)state.CancellationToken;
var rand=new Random();
while (!cancellationToken.IsCancellationRequested)
{
Value=rand.Next();
Console.WriteLine("\r\n产生一个值{0}", Value);
valueAvailableEvent.Set();
Thread.Sleep(500);
}
Console.WriteLine("生产者线程被取消。");
}
public static void ConsumerThreadWork(dynamic state)
{
var valueAvailableEvent=(AutoResetEvent)state.ValueAvailableEvent;
var cancellationToken=(CancellationToken)state.CancellationToken;
var events=new[] { valueAvailableEvent, cancellationToken.WaitHandle };
while (true)
{
var eventIndex=WaitHandle.WaitAny(events);
// 处理数据
if (eventIndex==0)
{
Console.WriteLine("处理值{0}。", Value);
}
// 处理取消事件
else if (eventIndex==1)
{
Console.WriteLine("消费者线程被取消。");
break;
}
}
}
}
关于如何取消.net后台线程的执行的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【服务器】asp.net页面状态管理cookie和服务器状
- 如何取消.net后台线程的执行
- 【Repeater控件】.NET实现Repeater控件+AspNetPag
- 【客户端】获取客户端IP地址c#/vb.net各自实现代
- 【asp】asp.net上传execl文件后 在页面上加载显示
- 【Excel】页面导出为Excel的时间格式的问题-时间
- 【ref】asp.net(c#)ref out params的区别-out-pa
- 【数据控件】asp.net获得数据控件事件索引并获取
- 【NET】10个.NET中删除空白字符串的方法-删除空白
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
