您的位置:首页 > 编程语言 > C#

C#如何判断线程池中所有的线程是否已经完成之Demo

2018-02-06 09:58 831 查看
start:

System.Threading.RegisteredWaitHandle rhw = null;
new Action(() =>
{
for (var i = 0; i < 30; i++) {
new Action<int>((index) =>
{
System.Threading.Thread.Sleep(1000);
Console.WriteLine(System.Threading.Thread.CurrentThread.Name + "执行完毕" + index);
}).BeginInvoke(i, null, null);
}
}).BeginInvoke(null, null);
rhw = System.Threading.ThreadPool.RegisterWaitForSingleObject(new System.Threading.AutoResetEvent(false), new System.Threading.WaitOrTimerCallback((obj, b) =>
{
int workerThreads = 0;
int maxWordThreads = 0;
//int
int compleThreads = 0;
System.Threading.ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads);
System.Threading.ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads);
//Console.WriteLine(workerThreads);
//Console.WriteLine(maxWordThreads);
//当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成
if (workerThreads == maxWordThreads)
{
//当执行此方法后CheckThreadPool将不再执行
rhw.Unregister(null);
//此处加入所有线程完成后的处理代码
Console.WriteLine("f");
rhw = null;
}
}), null, 100, false);
while (rhw != null) { }
System.Threading.Thread.Sleep(10000) ;
goto start;
Console.WriteLine("finished");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: