C#是一門支持多線程的語言,因此線程的使用也是比較常見的。由于線程的知識在Win32編程的時候已經(jīng)說得過多,所以在.Net中很少介紹這部分(可能.Net不覺得這部分是它所特有的)。
那么線程相關(guān)的問題大致有如下四類(這篇文章只討論單線程、單線程與UI線程這兩方面的問題)。
問題一,線程的基本操作,例如:暫停、繼續(xù)、停止等;
問題二,如何向線程傳遞參數(shù)或者從中得到其返回值;
問題三,如何使線程所占用的CPU不要老是百分之百;
最后一個,也是問題最多的,就是如何在子線程來控制UI中的控件,換句話說,就是在線程中控制窗體某些控件的顯示。
對于問題一,我不建議使用Thread類提供的Suspend、Resume以及Abort這三個方法,前兩個有問題,好像在VS05已經(jīng)屏蔽這兩個方法;對于Abort來說,除了資源沒有得到及時釋放外,有時候會出現(xiàn)異常。如何做呢,通過設(shè)置開關(guān)變量來完成。
對于問題二,我不建議使用靜態(tài)成員來完成,僅僅為了線程而破壞類的封裝有些得不償失。那如何做呢,通過創(chuàng)建單獨(dú)的線程類來完成。
對于問題三來說,造成這個原因是由于線程中進(jìn)行不間斷的循環(huán)操作,從而使CPU完全被子線程占有。那么處理此類問題,其實(shí)很簡單,在適當(dāng)?shù)奈恢谜{(diào)用Thread.Sleep(20)來釋放所占有CPU資源,不要小看這20毫秒的睡眠,它的作用可是巨大的,可以使其他線程得到CPU資源,從而使你的CPU使用效率降下來。
看完前面的三個問題的解釋,對于如何做似乎沒有給出一個明確的答案,為了更好地說明如何解決這三個問題,我用一個比較完整的例子展現(xiàn)給大家,代碼如下。
新聞熱點(diǎn)
疑難解答
圖片精選