淺談VB.NET線程構(gòu)造器
VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET線程構(gòu)造器,包括介紹調(diào)用Thread.Sleep方法等方面。
本文介紹在線程啟動中,你可以通過線程對象的一個方法來控制它的狀態(tài)。你可以通過調(diào)用Thread.Sleep方法來暫停一個線程的執(zhí)行,這個方法可以接收一個整型值,用來決定線程休眠的時間。拿前面的例子來說,如果你想讓列表項目增加的速度變慢,可以在其中放入一個sleep方法的調(diào)用:
- Private Sub BackgroundProcess()
- Dim i As Integer = 1
- Do While Tru
- ListBox1.Items.Add("Iterations: " + i)
- i += 1
- Thread.CurrentThread.Sleep(2000)
- Loop
- End Sub
CurrentThread是一個public static的屬性值,可讓你得到當(dāng)前運(yùn)行線程的一個引用。
你還可以通過調(diào)用Thread.Sleep (System.Threading.Timeout.Infinite)來讓線程進(jìn)入休眠狀態(tài),有點特別的是,這個調(diào)用的休眠時間是不確定的。要中斷這個休眠,你可以調(diào)用Thread.Interrupt方法。
與休眠和中斷類似的是掛起和恢復(fù)。掛起可讓你暫停一個線程,直到另一個線程調(diào)用Thread.Resume為止。休眠和掛起的區(qū)別是,后者并不立刻讓線程進(jìn)入一個等待的狀態(tài),線程并不會掛起,直到.NET runtime認(rèn)為現(xiàn)在已經(jīng)是一個安全的地方來掛起它了,而休眠則會立刻讓線程進(jìn)入一個等待的狀態(tài)。
最后要介紹的是Thread.Abort,它會停止一個線程的執(zhí)行。在我們的那個簡單例子中,如果要加入一個按鈕來停止處理,很簡單,我們只要調(diào)用Thread.Abort方法就行了,如下所示:
- Private Sub Button2_Click(ByVal sender As System.Object,
_ByVal e As System.EventArgs) Handles Button2.Clickt.Abort()- End Sub
這就是多線程的強(qiáng)大之處。用戶界面的響應(yīng)很好,因為它運(yùn)行在一個單獨的線程中,而后臺的處理運(yùn)行在另外一個線程中。在用戶按下取消按鈕時,便會馬上得到響應(yīng),并且停止處理。
上面的例子只是一個相當(dāng)簡單的應(yīng)用。在編程時,你還需要使用到多線程的許多復(fù)雜特性。其中的一個問題是如何將程序的數(shù)據(jù)由VB.NET線程構(gòu)造器傳入或者傳出,也就是說,對于放到另外一個線程中的過程,你既不能傳參數(shù)給它,也不能由它返回值。這是由于你傳入到VB.NET線程構(gòu)造器的過程是不能擁有任何的參數(shù)或者返回值的。為了解決這個問題,可以將你的過程封裝到一個類中,這樣方法的參數(shù)就可使用類中的字段。
這里我們舉一個簡單的例子,如果我們要計算一個數(shù)的平方,即:
- Function Square(ByVal Value As Double) As Double
- Return Value * Value
- End Function
【編輯推薦】