+ -
当前位置:首页 → 问答吧 → C# 如何判断子线程全部结束???急急急

C# 如何判断子线程全部结束???急急急

时间:2011-12-14

来源:互联网

比如现在有20个子线程和一个主线程。怎么判断20个子线程已经运行完毕,在主线程中打印任务执行完毕!

作者: oyxccyj   发布时间: 2011-12-14

WaitForMultipleObjects

作者: bdmh   发布时间: 2011-12-14

能详细点不?接触不久,现在手头工作中遇到这问题!

作者: oyxccyj   发布时间: 2011-12-14

是否可以用join()?主线程等待子线程运行完再执行

作者: jason19880221   发布时间: 2011-12-14

那个太慢了吧?试过了,数据都是以下子全部蹦出来的,而不是一条一条打印出来的!求高手解决!

作者: oyxccyj   发布时间: 2011-12-14

那你就在进程看还在运行没的
C# code

 System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process thisprocess in allProcess)
            {
                string processName = thisprocess.ProcessName;
                if (processName.ToLower() == "进程名字")
                {
                    try
                    {
                        //执行没结束的操作
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                        return;
                    }
                }
            }

作者: zyloveyrf   发布时间: 2011-12-14

还有别的方法吗?

作者: oyxccyj   发布时间: 2011-12-14

如果是.Net4可以用CountDownEvent等,写法最简单。
以前版本可以用回调,用事件(见例子),等等。
C# code

int threads;
private void button1_Click(object sender, EventArgs e)
{
    int threadCount = threads = 4;
    AutoResetEvent eventFinished = new AutoResetEvent(false);
    for (int i = 0; i < threadCount; i++)
    {
        ThreadPool.QueueUserWorkItem(state =>
            {
                Thread.Sleep(Math.Abs(Guid.NewGuid().GetHashCode()) % 1000);
                if (Interlocked.Decrement(ref this.threads) == 0)
                {
                    (state as AutoResetEvent).Set();
                }
            },
            eventFinished
            );
    }

    eventFinished.WaitOne();
    //执行完毕 
}

作者: gomoku   发布时间: 2011-12-14

只懂得5楼的写法

作者: cr75608859   发布时间: 2011-12-14