如何优雅的控制C#的线程
2017-03-22 09:43
225 查看
一直以来, 没有找到一种比较优雅的控制线程的方式, 今天翻看了一下chrome的书签, 发现以前居然收藏过这样的文章, 呵呵, 果然只收藏是不行的, 还得看.
原文链接: http://www.cnblogs.com/bloodish/archive/2011/03/21/1990025.html
/// <summary> /// 使用Event做同步控制 /// 三个Event组合使用就可以产生同Suspend,Resuem,Abort相同的效果 /// 而且你可以控制Abort的时机以及并作出适当的处理 /// 而不是像Thread.Abort一样通过异常的方式结束线程 /// </summary> static void UseSyncEvent() { Console.WriteLine("----------Use sync event----------"); AutoResetEvent evtPause = new AutoResetEvent(false); AutoResetEvent evtResume = new AutoResetEvent(false); AutoResetEvent evtStop = new AutoResetEvent(false); Thread t = new Thread( new ThreadStart(() => { //WaitOne(1000),可产生Sleep(1000)相同的效果 //如果eveStop被置位,则立即返回True,跳出循环 //如果等待1000ms超时,则返回False,继续循环 while (!evtStop.WaitOne(1000)) { //WaitOne(0)可立即判断evtPase有没有被置位 //如果置位,进入暂停状态,等待Resume被置位才会恢复线程执行 if (evtPause.WaitOne(0)) { //WaitOne()不带参数表示一直等待,直到被置位 evtResume.WaitOne(); } Console.WriteLine("Now Date:{0}", DateTime.Now); } } )); t.Start(); //暂停线程执行 Console.ReadKey(); evtPause.Set(); Console.WriteLine("Thread suspended"); //继续线程执行 Console.ReadKey(); evtResume.Set(); Console.WriteLine("Thread resumed"); //结束线程 Console.ReadKey(); evtStop.Set(); Console.WriteLine("Thread stopped"); Console.ReadKey(); }
原文链接: http://www.cnblogs.com/bloodish/archive/2011/03/21/1990025.html
相关文章推荐
- C# Tip -- 如何优雅的控制线程状态
- C# Tip -- 如何优雅的控制线程状态
- C# Tip -- 如何优雅的控制线程状态
- 如何优雅地控制线程状态
- c# 线程中如何控制控件焦点
- 如何优雅地控制线程状态
- c# 线程中如何控制控件焦点
- C#多线程学习(二) 如何操纵一个线程
- C#中如何控制缓冲空间的上限
- c#中子线程控制进度条的一个简单例子
- c#线程基础之线程控制
- C#中子线程控制进度条的一个简单例子
- C#中子线程控制进度条的一个简单例子
- c#使用线程下载文件的控制技巧和缺陷
- c#中如何控制模态子窗体中的进度条
- c#中如何控制模态子窗体中的进度条
- c#中子线程控制进度条的一个简单例子
- 如何:对制造者线程和使用者线程进行同步(C# 编程指南)
- c#中子线程控制进度条的一个简单例子 - jinjazz - CSDNBlog
- 如何:创建和终止线程(C# 编程指南)