线程处于活动状态始终为假 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);
                }

            }

线程处于活动状态始终为假 C#

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

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

请参阅文档

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

若要了解如何使用线程,请参阅 msdn 上的此线程教程。

启动线程后检查线程是否处于活动状态,返回 false。这是因为线程不会立即开始。相反,请检查其状态是否已停止:

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

线程在完成任务时停止。您可以在此处查看其他代码。