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