2011-12-20 43 views
0

我的應用程序運行一些線程,每個線程都做某些事情。 我希望每個線程在列表框中顯示其狀態。顯示每個線程的狀態

那麼,一個線程如何識別自己(通過使用線程ID或其他),並將其狀態設置爲List

+0

你是什麼意思的線程狀態?例如 – Falanwe 2011-12-20 08:54:26

+0

@Falanwe剩下多少時間。 – 2011-12-20 09:14:04

回答

1

每個線程都有一個id。你可以用

Thread t; 
int id = t.ManagedThreadId; 

訪問它的一些狀態更新全局數據結構我會用一本字典,並使用id作爲重點。注意鎖定該數據結構的訪問:

Dictionary<int, SomeStateClass> threadStates = new Dictionary<int, SomeStateClass>(); 

public void updateThreadState(int id, SomeStateClass newState) { 
    lock (threadStates) { 
     threadStates[id] = newState; 
    } 
} 
2

您可以使用Thread.CurrentThread.ManagedThreadId來識別託管線程。並且請記住Invoke調用您的列表框(或在您使用WPF時使用Dispatcher),因爲UI線程以外的線程無法直接訪問它。

+0

如果我將數據填充到List並將ListBox的數據源設置爲List,那麼是否需要調用調用? – 2011-12-20 08:54:57

+0

@Mahdi:是的,你需要一個調用,順便說一句,因爲你要在輔助主線上執行主線程。 – Tigran 2011-12-20 08:58:18

1

您可以使用Invoke與委託。然後每個線程將負責更新它擁有的ListBoxItem。

1

你可以只讓你想監控的Thread的集合(數組,列表,任何你想要的)。該線程類公開了許多您可能需要的屬性,包括ThreadState屬性。從那裏很容易顯示你想要的信息。

這樣你的工作線程就不用擔心通知他們的狀態。