嗨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);
}
}
答案 0 :(得分:1)
在threadTask变量的循环中,每次创建新实例时。因此,每当您检查isAlive时,它将引用当前循环中新创建的实例而不是先前创建的线程,因此它始终返回false。
答案 1 :(得分:1)
如果线程已经启动并且没有正常终止或中止,则Thread.IsAlive属性返回 true ;否则, false 。
在检查IsAlive属性时,线程尚未启动。所以在那一点上你总是会变得虚假。
要了解有关使用线程的信息,请参阅msdn。
中的Threading Tutorial答案 2 :(得分:0)
在启动线程后检查线程是否仍然存在,返回false。这是因为线程不是立即开始的。相反,请检查其状态是否已停止:
if(t.ThreadState == System.Threading.ThreadState.Stopped)
完成任务后线程停止。您可以检查其他代码here。