您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關VB.NET如何實現多線程編程技術,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
傳統的VB.NET多線程編程開發人員已經建立了同步應用程序,在這些程序中事務按順序執行。盡管由于多個事務多多少少地同時運行使多線程應用程序效率更高,但是使用先前版本的VisualBasic很難建立這類程序。
多線程程序是可行的,因為操作系統是多任務的,它有模擬同一時刻運行多個應用程序的能力。盡管多數個人計算機只有一個處理器,但是現在的操作系統還是通過在多個執行代碼片斷之間劃分處理器時間提供了多任務。線程可能是整個應用程序,但通常是應用程序可以單獨運行的一個部分。操作系統根據線程的優先級和離最近運行的時間長短給每一個線程分配處理時間。多線程對于時間密集型事務(例如文件輸入輸出)應用程序的性能有很大的提高。
但是也有必須細心的地方。盡管多線程能提高性能,但是每個線程還是需要用附加的內存來建立和處理器時間來運行,建立太多的線程可能降低應用程序的性能。當設計多線程應用程序時,應該比較性能與開銷。多任務成為操作系統的一部分已經很久了。但是直到最近VisualBasic程序員才能使用無文檔記錄特性(undocumented)或者間接使用COM組件或者操作系統的異步部分執行多線程事務。.NET框架組件為開發多線程應用程序,在System.Threading名字空間中提供了全面的支持。
本文討論多線程的好處以及怎樣使用VisualBasic .NET開發多線程應用程序。盡管VisualBasic .NET和.NET框架組件使開發多線程應用程序更容易,但是本文作了調整使其適合高級讀者和希望從早期VisualBasic轉移到VB.NET多線程編程的開發人員。
1多線程處理的優點
盡管同步應用程序易于開發,但是它們的性能通常比多線程應用程序低,因為一個新的事務必須等待前面的事務完成后才能開始。如果完成某個同步事務的時間比預想的要長,應用程序可能沒有響應。多線程處理可以同時運行多個過程。例如,字處理程序能夠在繼續操作文檔的同時執行拼寫檢查事務。因為多線程應用程序把程序分解為獨立的事務,它們能通過下面的途徑充分提高性能:
◆多線程技術可以使程序更容易響應,因為在其它工作繼續時用戶界面可以保持激活。
◆當前不忙的事務可以把處理器時間讓給其它事務。
◆花費大量處理時間的事務可以周期性的把時間讓給其它的事務。
◆事務可以在任何時候停止。
◆可以通過把單獨事務的優先級調高或調低來優化性能。明確地建立多線程應用程序的決定依賴于幾個因素。多線程最適合下面的情況:
◆時間密集或處理密集的事務妨礙用戶界面。
◆單獨的事務必須等待外部資源,例如遠程文件或Internet連接。
例如,某個應用程序跟隨Web頁面上的鏈接并下載符合特定條件的文件。這種應用程序可以同步一個接一個地下載文件或者使用多線程在同一時刻下載多個文件。多線程的方法比同步方法的效率高得多,因為即使某些線程從遠程Web服務器上接收到的響應很慢,文件也可以被下載。
2建立新線程
建立線程的最直接的方法是建立線程類的一個新的實例并且使用AddressOf語句替你希望運行的過程傳遞一個委托。例如下面的代碼運行一個作為單獨的線程的叫做SomeTask的子過程。
Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask) Thread1.Start ' 這兒的代碼立即運行
這就是建立和啟動線程的全部工作。調用線程的Start方法后面的任何代碼立即執行,不需要等待前面線程的結束。下表是你能使用的控制單獨線程的方法:
上面的大多數方法字面上容易理解,但是安全點(safe point)的概念對你來說可能是新的。安全點是代碼中的某個位置,在這個位置通用語言運行時可以安全地執行自動無用單元收集(garbage collection,釋放無用變量并恢復內存的過程)。當調用線程的Abort或Suspend方法時,通用語言運行時分析代碼,決定線程停止運行的適當位置。
下表是線程的一些常用的屬性:
當建立和管理線程時它的屬性和方法很重要。本文的"線程同步"部分將討論你怎樣使用這些屬性和方法控制和調整線程。
3線程參數和返回值
前面例子中的線程調用沒有參數和返回值。這是使用這種方法建立和運行線程的主要缺點之一。但是,你可以在類或結構體中包裝線程,為運行在單獨線程上的過程提供和返回參
FriendStrArgAsString FriendRetValAsBoolean SubSomeTask()'StrArg字段是一個參數 MsgBox("TheStrArgcontainsthestring"&StrArg) RetVal=True'設置返回參數中的返回值 EndSub EndClass'為了使用這個類,設置存儲參數的屬性或者字段,接著異步調用需要的方法 SubDoWork() DimTasksAsNewTasksClass() DimThread1AsNewSystem.Threading.Thread(AddressOfTasks.SomeTask) Tasks.StrArg="SomeArg"'設置作為參數使用的字段 Thread1.Start()'啟動新線程 Thread1.Join()'等待線程1結束'顯示返回值 MsgBox("Thread1returnedthevalue"&Tasks.RetVal) EndSub ClassTasksClass
手工建立和管理線程最適合于希望很好地控制細節(例如線程的優先級和線程模型)的應用程序。你可能想象,通過這種方法管理大量的線程是很困難的。在你需要很多線程時考慮使用線程池來減小復雜程度。
關于“VB.NET如何實現多線程編程技術”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。