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

.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#
主站蜘蛛池模板: 寻乌县| 崇仁县| 台北县| 石柱| 股票| 吉林省| 宿松县| 洛宁县| 遂溪县| 天祝| 益阳市| 麻栗坡县| 泾阳县| 武城县| 阿勒泰市| 富民县| 宜宾县| 吕梁市| 石景山区| 博野县| 平泉县| 巴东县| 阿拉尔市| 庆阳市| 南充市| 沅江市| 东台市| 章丘市| 自贡市| 内黄县| 新干县| 莒南县| 大洼县| 绥棱县| 葫芦岛市| 井陉县| 手游| 泸水县| 游戏| 拜泉县| 内乡县|