线程isalive总是假c#

时间:2014-12-04 09:38:02

标签: c# multithreading

嗨frnds我是线程概念的新手。 为什么threadTask.IsAlive总是为false; 我尝试过使用threadstate,但我总是得到“Unstarted”。

foreach (DataRow TaskRow in dtCurrentTask.Rows)
            {

                sTaskId = TaskRow["TaskId"].ToString();
                sTaskAssigned = TaskRow["TaskAssigned"].ToString();

                threadTask = new Thread(() => RunTask(sTaskId));
                threadTask.Name = "thread_" + sTaskId;



                Console.WriteLine(threadTask.Name + " is alive :" + threadTask.IsAlive);
                if (!threadTask.IsAlive || sTaskAssigned == "0")
                {
                    Console.WriteLine("Starting thread :" + threadTask.Name);
                    Thread.Sleep(7000);

                    threadTask.Start();
                    UpdateTaskStatus(true);

                }



            }

3 个答案:

答案 0 :(得分:1)

在threadTask变量的循环中,每次创建新实例时。因此,每当您检查isAlive时,它将引用当前循环中新创建的实例而不是先前创建的线程,因此它始终返回false。

答案 1 :(得分:1)

如果线程已经启动并且没有正常终止或中止,则Thread.IsAlive属性返回 true ;否则, false

请参阅documentation

在检查IsAlive属性时,线程尚未启动。所以在那一点上你总是会变得虚假。

要了解有关使用线程的信息,请参阅msdn。

中的Threading Tutorial

答案 2 :(得分:0)

在启动线程后检查线程是否仍然存在,返回false。这是因为线程不是立即开始的。相反,请检查其状态是否已停止:

if(t.ThreadState == System.Threading.ThreadState.Stopped)

完成任务后线程停止。您可以检查其他代码here