VB.NET并發性判斷線程狀態
VB.NET編程語言的到來,在一定程度上改變了開發人員的編程方式,提高了編程效率,并且增加了程序開發的安全性。我們今天要為大家介紹的則是VB.NET并發性的一些作用,希望能給大家帶來一些幫助。#t#
當用戶在寫出多線程程序的時候,可能***有挑戰性的就是獨立的線程和程序的其他的部分有并發性。例如,程序中的一個獨立的線程正在處理一系列的名稱,而程序的另一個部分必須等待這個線程完成以后才能進行,通常處理VB.NET并發性的線程的辦法就是判斷線程的狀態或者通過一個事件去標志和得到一個特征值。
最簡單的,也是效率***的方法就是判斷一個線程的IsAlive屬性的值,當一個線程在開始(Start)以前它的屬性IsAlive的值是"False",而在它運行的過程中,它的屬性IsAlive的值是"True"。這種方法并沒有通過一個事件去標志和得到一個特征值可靠,而且如果這樣做的慶,也失去了自由線程的很多優點和便利之處。例如:
- while anotherthread.IsAlive=False
- '一直等待到該線程開始
- End While
- '線程已經開始,現在等待它結束
- 'While anotherthread.IsAlive=True
- '等待一直等待到線程結束
- End While
- '作一些線程結束以后的事情
一個更好的處理線程的VB.NET并發性辦法就是使用事件,每一個線程都能夠運行一個事件把它自己的狀態以一個標志的形式給主程序一個值,或者是給其他一個線程一個具有標志自身狀態后個值,這樣當多個線程在運行一個過程的多個拷貝的時候,這些線程都具有自己特有的事件來標志各自的狀態,則在線程之處的程序的其他的部分,就可以通過運行這些事件,得到線程的信息,并且進行下一步的信息的處理。例如:
- Public Event Status(Byval
ThreaStatus As Integer,
Byval ThreadID As Integer)
VB.NET 提供了SyncLock表述來使得在一個expression中一些statements可以具有VB.NET并發性,這保證了多個線程在運行時不在同一時間里,運行相同的statements,當進入了SyncLock模塊,共享的方法System.Monitor.Enter將在特定的expression下運行,一直到這個特定的線程對expression返回的對象有exclusive Lock以后,模塊中的代碼才會停止運行。
注意:expression的類型必須是可引用的那種類型。