C#的WaitHandle : 管理多线程状态
2015-05-26 17:23
323 查看
有时候,我们创建了多线程,需要知道是否都完成了各自的工作。比如说,开启了多线程的下载,如何终止所有的线程并且在确保所有线程都终止之后才继续执行程序的退出呢?
如果不开启线程而是直接在UI线程调用TestWaitAll(),就会有异常
WaitHandle.WaitAll(waitHandles),主线程乖乖等待所有线程完成工作
WaitHandle.WaitAll(waitHandles,2000),设定等待时间,表示主线程愿意等待子线程执行两秒钟
WaitHandle.WaitAny,就是等待任何一线程完成工作
参考:
Thread执行循环的顺序启动WaitHandle.WaitAll方法
C#多线程之二:ManualResetEvent和AutoResetEvent
C#多线程学习 之 线程池[ThreadPool]
C# 多线程的自动管理(线程池)
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private volatile bool isContinue = false; static List<WaitHandle> waitHandles = new List<WaitHandle>(); private void Button_ThreadStart_Click(object sender, RoutedEventArgs e) { if (isContinue) return; isContinue = true; Thread t = new Thread(TestWaitAll);//先开启一个线程 t.Name = "TestWaitAll"; t.Start(); } private void Button_ThreadStop_Click(object sender, RoutedEventArgs e) { isContinue = false; } public void TestWaitAll() { for (int i = 0; i < 5; i++) { //WaitHandle是一个抽像类别所以得实体化它的子类,也就是 ManualResetEvent 类 或 AutoResetEvent 类 ManualResetEvent wh = new ManualResetEvent(false); waitHandles.Add(wh); ThreadPool.QueueUserWorkItem(Task, wh); } WaitHandle.WaitAll(waitHandles.ToArray()); Console.WriteLine("所有线程都终止!!!!!!"); MessageBox.Show("搞定!"); } public void Task(Object state) { ManualResetEvent mre = (ManualResetEvent)state; while (isContinue) { Console.WriteLine("{0} : {1}", mre.Handle.ToString(), DateTime.Now.ToLongTimeString()); Thread.Sleep(1000); } Console.WriteLine("当前线程终止"); mre.Set(); } }
如果不开启线程而是直接在UI线程调用TestWaitAll(),就会有异常
WaitHandle.WaitAll(waitHandles),主线程乖乖等待所有线程完成工作
WaitHandle.WaitAll(waitHandles,2000),设定等待时间,表示主线程愿意等待子线程执行两秒钟
WaitHandle.WaitAny,就是等待任何一线程完成工作
参考:
Thread执行循环的顺序启动WaitHandle.WaitAll方法
C#多线程之二:ManualResetEvent和AutoResetEvent
C#多线程学习 之 线程池[ThreadPool]
C# 多线程的自动管理(线程池)
相关文章推荐
- c# 多线程 创建跨进程的EventWaitHandle 源码
- C# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem
- 关于C#多线程的WaitHandle
- 【C#.NET】ASP.NET状态管理之一:Cookie
- C#的多线程机制探索(四)—多线程的自动管理
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程学习(五) 多线程的自动管理(定时器)
- 浅谈思路严谨的管理软件中的用户在线状态控制【附部分C#参考代码】
- c#多线程同步之EventWaitHandle的应用
- 艾伟:C#多线程学习(五) 多线程的自动管理(定时器)
- [C#自学第三天]C# state 状态管理
- 浅谈思路严谨的管理软件中的用户在线状态控制【附部分C#参考代码】
- C#多线程学习(五) 多线程的自动管理(定时器)
- [叩响C#之门]写给初学者:多线程系列(五)——线程的状态
- c#中的socket中的time_wait状态处理方法
- C#多线程学习(四) 多线程的自动管理(线程池)
- C#多线程学习(五) 多线程的自动管理(定时器)
- 【C#】WaitHandle、EventWaitHandle、ManualResetEvent和AutoResetEvent线程同步类
- 《CLR via C#》笔记——异常和状态管理
- Java多线程:线程状态以及wait(), notify(), notifyAll()