目的
希望能時刻監視程序所開的所有線程的執行進度,隨時對這些線程進行操作。
研究如何實現
今天我研究半天如何管理多線程,就像FlashGet那樣能夠知道一個文件(線程)什么時候下載結束正在干什么下載了多少等等。
我希望能時刻監視我這些線程的執行進度,隨時對這些線程進行操作。但是應該用什么函數來實現呢?
根據現在已經掌握得不多的線程知識,我寫了一種比較不理想但能實現管理線程的方法。就是有的時候容易假死,因為定時器是在主線程中執行的。如果網友朋友有什么比較好的管理方法的話還望賜教。
實現核心代碼簡介
聲明公共變量
ArrayList ThreadList = new ArrayList();
首先啟動定時器,檢測線程狀態
timer1.Interval = 3000;
timer1.Start();
開線程,開10個吧,把每一個線程的作為一個對象存進ThreadList,然后把相應的ManagedThreadId存入listView1中
int n = 10;
Thread[] kk = new Thread[n];
for (int i = 0; i < n; i++)
{
kk[i] = new Thread(new ThreadStart(proc));
ListViewItem item1 = new ListViewItem(kk[i].ManagedThreadId.ToString(), 0);
item1.SubItems.Add("0");
listView1.Items.Add(item1);
ThreadList.Add(kk[i]);
kk[i].Start();
}
重頭戲,定時器檢測所有的線程狀態,如果該線程停止了,則在listview中顯示停止,并且再在ThreadList中刪除該對象!
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < ThreadList.Count; i++)
{
Thread o = (Thread)ThreadList[i];
if (o.ThreadState.ToString() == "Stopped")
{
foreach (ListViewItem LVI in listView1.Items)
{
if (Convert.ToInt32(LVI.SubItems[0].Text) == o.ManagedThreadId)
{
LVI.SubItems[1].Text = "Stopped";
}
}
ThreadList.RemoveAt(i--);
}
}
}

圖片簡介
遺憾
該方法顯然效率不夠最優化,不適合超龐大的線程群,不過一般小問題也就夠了哈~~~

