2014-12-04 67 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