2014-12-04 53 views
0

嗨frnds我是新的线程概念。 为什么threadTask.IsAlive始终为false; 我已经尝试过使用threadstate,但我总是得到“Unstarted”。线isalive总是假c#

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

你为什么期望它活着?在哪一行?它在开始之前不会活着。 – TomTom 2014-12-04 09:39:19

+5

因为你有没有开始呢? – 2014-12-04 09:39:31

回答

1

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

+0

那么如何创建实例 – 2014-12-04 10:49:04

1

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

documentation

,在您正在检查IsAlive属性点,线尚未启动。所以在那个时候你总是会失败。

要了解使用线程,请参阅msdn上的Threading Tutorial