线程处于活动状态始终为假 C#
本文关键字:活动状态 线程 | 更新日期: 2023-09-27 18:33:14
嗨,朋友们,我是线程概念的新手。为什么threadTask.IsAlive总是假的;我尝试过使用线程状态,但我总是"未启动"。
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);
}
}
在 threadTask 变量的循环中,每次创建新实例时。因此,每当您检查 isAlive 时,它都会引用当前循环中新创建的实例,而不是以前创建的线程,因此它总是返回 false。
如果线程已启动且未正常终止或中止,则 Thread.IsAlive 属性返回 true;否则返回 false。
请参阅文档
在检查 IsAlive 属性时,线程尚未启动。所以在这一点上,你总是会得到假的。
若要了解如何使用线程,请参阅 msdn 上的此线程教程。
启动线程后检查线程是否处于活动状态,返回 false。这是因为线程不会立即开始。相反,请检查其状态是否已停止:
if(t.ThreadState == System.Threading.ThreadState.Stopped)
线程在完成任务时停止。您可以在此处查看其他代码。