成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

.Net中多線程管理的一種方法(C#)

2010-08-28 10:50:18來源:西部e網作者:

目的

希望能時刻監視程序所開的所有線程的執行進度,隨時對這些線程進行操作。


研究如何實現

今天我研究半天如何管理多線程,就像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--);
                 }
            }

        } 


圖片簡介


遺憾

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

關鍵詞:C#
主站蜘蛛池模板: 甘肃省| 东安县| 含山县| 漳浦县| 南丹县| 清丰县| 阳朔县| 高尔夫| 安西县| 左云县| 日喀则市| 北安市| 岫岩| 东莞市| 鞍山市| 区。| 姚安县| 建德市| 灌阳县| 洪湖市| 屏山县| 芦溪县| 长春市| 和硕县| 泸西县| 灵璧县| 翁牛特旗| 开化县| 陇西县| 白沙| 顺昌县| 千阳县| 绩溪县| 大荔县| 寻乌县| 洞口县| 泸州市| 罗平县| 苏尼特右旗| 张北县| 肃宁县|