溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VB.NET如何實(shí)現(xiàn)多線程編程技術(shù)

發(fā)布時(shí)間:2021-12-02 09:49:37 來源:億速云 閱讀:657 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)VB.NET如何實(shí)現(xiàn)多線程編程技術(shù),小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

傳統(tǒng)的VB.NET多線程編程開發(fā)人員已經(jīng)建立了同步應(yīng)用程序,在這些程序中事務(wù)按順序執(zhí)行。盡管由于多個(gè)事務(wù)多多少少地同時(shí)運(yùn)行使多線程應(yīng)用程序效率更高,但是使用先前版本的VisualBasic很難建立這類程序。

多線程程序是可行的,因?yàn)椴僮飨到y(tǒng)是多任務(wù)的,它有模擬同一時(shí)刻運(yùn)行多個(gè)應(yīng)用程序的能力。盡管多數(shù)個(gè)人計(jì)算機(jī)只有一個(gè)處理器,但是現(xiàn)在的操作系統(tǒng)還是通過在多個(gè)執(zhí)行代碼片斷之間劃分處理器時(shí)間提供了多任務(wù)。線程可能是整個(gè)應(yīng)用程序,但通常是應(yīng)用程序可以單獨(dú)運(yùn)行的一個(gè)部分。操作系統(tǒng)根據(jù)線程的優(yōu)先級和離最近運(yùn)行的時(shí)間長短給每一個(gè)線程分配處理時(shí)間。多線程對于時(shí)間密集型事務(wù)(例如文件輸入輸出)應(yīng)用程序的性能有很大的提高。

但是也有必須細(xì)心的地方。盡管多線程能提高性能,但是每個(gè)線程還是需要用附加的內(nèi)存來建立和處理器時(shí)間來運(yùn)行,建立太多的線程可能降低應(yīng)用程序的性能。當(dāng)設(shè)計(jì)多線程應(yīng)用程序時(shí),應(yīng)該比較性能與開銷。多任務(wù)成為操作系統(tǒng)的一部分已經(jīng)很久了。但是直到最近VisualBasic程序員才能使用無文檔記錄特性(undocumented)或者間接使用COM組件或者操作系統(tǒng)的異步部分執(zhí)行多線程事務(wù)。.NET框架組件為開發(fā)多線程應(yīng)用程序,在System.Threading名字空間中提供了全面的支持。

本文討論多線程的好處以及怎樣使用VisualBasic .NET開發(fā)多線程應(yīng)用程序。盡管VisualBasic .NET和.NET框架組件使開發(fā)多線程應(yīng)用程序更容易,但是本文作了調(diào)整使其適合高級讀者和希望從早期VisualBasic轉(zhuǎn)移到VB.NET多線程編程的開發(fā)人員。

1多線程處理的優(yōu)點(diǎn)

盡管同步應(yīng)用程序易于開發(fā),但是它們的性能通常比多線程應(yīng)用程序低,因?yàn)橐粋€(gè)新的事務(wù)必須等待前面的事務(wù)完成后才能開始。如果完成某個(gè)同步事務(wù)的時(shí)間比預(yù)想的要長,應(yīng)用程序可能沒有響應(yīng)。多線程處理可以同時(shí)運(yùn)行多個(gè)過程。例如,字處理程序能夠在繼續(xù)操作文檔的同時(shí)執(zhí)行拼寫檢查事務(wù)。因?yàn)槎嗑€程應(yīng)用程序把程序分解為獨(dú)立的事務(wù),它們能通過下面的途徑充分提高性能:
◆多線程技術(shù)可以使程序更容易響應(yīng),因?yàn)樵谄渌ぷ骼^續(xù)時(shí)用戶界面可以保持激活。
◆當(dāng)前不忙的事務(wù)可以把處理器時(shí)間讓給其它事務(wù)。
◆花費(fèi)大量處理時(shí)間的事務(wù)可以周期性的把時(shí)間讓給其它的事務(wù)。
◆事務(wù)可以在任何時(shí)候停止。
◆可以通過把單獨(dú)事務(wù)的優(yōu)先級調(diào)高或調(diào)低來優(yōu)化性能。明確地建立多線程應(yīng)用程序的決定依賴于幾個(gè)因素。多線程最適合下面的情況:
◆時(shí)間密集或處理密集的事務(wù)妨礙用戶界面。
◆單獨(dú)的事務(wù)必須等待外部資源,例如遠(yuǎn)程文件或Internet連接。

例如,某個(gè)應(yīng)用程序跟隨Web頁面上的鏈接并下載符合特定條件的文件。這種應(yīng)用程序可以同步一個(gè)接一個(gè)地下載文件或者使用多線程在同一時(shí)刻下載多個(gè)文件。多線程的方法比同步方法的效率高得多,因?yàn)榧词鼓承┚€程從遠(yuǎn)程Web服務(wù)器上接收到的響應(yīng)很慢,文件也可以被下載。


2建立新線程

建立線程的最直接的方法是建立線程類的一個(gè)新的實(shí)例并且使用AddressOf語句替你希望運(yùn)行的過程傳遞一個(gè)委托。例如下面的代碼運(yùn)行一個(gè)作為單獨(dú)的線程的叫做SomeTask的子過程。

Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)  Thread1.Start  ' 這兒的代碼立即運(yùn)行

這就是建立和啟動(dòng)線程的全部工作。調(diào)用線程的Start方法后面的任何代碼立即執(zhí)行,不需要等待前面線程的結(jié)束。下表是你能使用的控制單獨(dú)線程的方法:

VB.NET如何實(shí)現(xiàn)多線程編程技術(shù)

上面的大多數(shù)方法字面上容易理解,但是安全點(diǎn)(safe point)的概念對你來說可能是新的。安全點(diǎn)是代碼中的某個(gè)位置,在這個(gè)位置通用語言運(yùn)行時(shí)可以安全地執(zhí)行自動(dòng)無用單元收集(garbage collection,釋放無用變量并恢復(fù)內(nèi)存的過程)。當(dāng)調(diào)用線程的Abort或Suspend方法時(shí),通用語言運(yùn)行時(shí)分析代碼,決定線程停止運(yùn)行的適當(dāng)位置。

下表是線程的一些常用的屬性:

VB.NET如何實(shí)現(xiàn)多線程編程技術(shù)

當(dāng)建立和管理線程時(shí)它的屬性和方法很重要。本文的"線程同步"部分將討論你怎樣使用這些屬性和方法控制和調(diào)整線程。

3線程參數(shù)和返回值

前面例子中的線程調(diào)用沒有參數(shù)和返回值。這是使用這種方法建立和運(yùn)行線程的主要缺點(diǎn)之一。但是,你可以在類或結(jié)構(gòu)體中包裝線程,為運(yùn)行在單獨(dú)線程上的過程提供和返回參

FriendStrArgAsString  FriendRetValAsBoolean  SubSomeTask()'StrArg字段是一個(gè)參數(shù)  MsgBox("TheStrArgcontainsthestring"&StrArg)  RetVal=True'設(shè)置返回參數(shù)中的返回值  EndSub  EndClass'為了使用這個(gè)類,設(shè)置存儲(chǔ)參數(shù)的屬性或者字段,接著異步調(diào)用需要的方法  SubDoWork()  DimTasksAsNewTasksClass()  DimThread1AsNewSystem.Threading.Thread(AddressOfTasks.SomeTask)  Tasks.StrArg="SomeArg"'設(shè)置作為參數(shù)使用的字段  Thread1.Start()'啟動(dòng)新線程  Thread1.Join()'等待線程1結(jié)束'顯示返回值  MsgBox("Thread1returnedthevalue"&Tasks.RetVal)  EndSub  ClassTasksClass

手工建立和管理線程最適合于希望很好地控制細(xì)節(jié)(例如線程的優(yōu)先級和線程模型)的應(yīng)用程序。你可能想象,通過這種方法管理大量的線程是很困難的。在你需要很多線程時(shí)考慮使用線程池來減小復(fù)雜程度。

關(guān)于“VB.NET如何實(shí)現(xiàn)多線程編程技術(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI