使用 Visual Basic .NET 進(jìn)行多線程編程 目錄
簡介過去,Visual Basic 開發(fā)人員創(chuàng)建的應(yīng)用程序都是程序任務(wù)依次執(zhí)行的同步應(yīng)用程序。雖然多線程應(yīng)用程序因多個任務(wù)幾乎同時運(yùn)行而具有更高的效率,但使用早期版本的 Visual Basic 來創(chuàng)建這樣的應(yīng)用程序卻很困難。 一項(xiàng)稱為多任務(wù)處理的操作系統(tǒng)功能使多線程程序成為可能,它能模擬同時運(yùn)行多個應(yīng)用程序的功能。雖然多數(shù)個人計(jì)算機(jī)都只安裝了一個處理器,但現(xiàn)代操作系統(tǒng)通過將處理器時間分配給多段可執(zhí)行代碼(稱為線程),提供了多任務(wù)處理功能。線程可以代表整個應(yīng)用程序,但通常只代表應(yīng)用程序中可單獨(dú)運(yùn)行的一部分。操作系統(tǒng)根據(jù)線程的優(yōu)先級、上次運(yùn)行線程后經(jīng)過的時間等因素為每個線程分配處理時間。在執(zhí)行耗時的任務(wù)(如文件輸入和輸出)時,多線程能夠顯著提高性能。 但要注意一個問題。雖然多線程可以提高性能,但每個線程都需要額外的內(nèi)存來創(chuàng)建線程,還需要處理器時間來運(yùn)行線程。如果創(chuàng)建的線程過多,反而會降低應(yīng)用程序的性能。在設(shè)計(jì)多線程應(yīng)用程序時,應(yīng)在添加更多線程所獲得的好處及其成本之間進(jìn)行權(quán)衡。 多任務(wù)處理成為操作系統(tǒng)的一部分已經(jīng)很長時間了。但直到最近,Visual Basic 程序員也只能通過非正式發(fā)布的功能,來執(zhí)行多線程任務(wù),或者通過使用 COM 組件或操作系統(tǒng)的異步組件,來間接實(shí)現(xiàn)此功能。而 .NET 框架在 System.Threading 命名空間中為開發(fā)多線程應(yīng)用程序提供了全面的支持。 本文討論多線程的一些優(yōu)點(diǎn)以及如何使用 Visual Basic .NET 來開發(fā)多線程應(yīng)用程序。雖然 Visual Basic .NET 和 .NET 框架使多線程應(yīng)用程序的開發(fā)變得很簡單,但本文主要面向中高級開發(fā)人員,以及正在從 Visual Basic 的早期版本過渡到 Visual Basic .NET 的開發(fā)人員。對于 Visual Basic .NET 的初學(xué)者,請首先閱讀 Visual Basic Language Tour(英文)中的相應(yīng)主題。 本文并非是對多線程編程的全面討論。要獲得更多的信息,請參閱本文最后列出的其他資源。 多線程處理的優(yōu)點(diǎn)同步應(yīng)用程序的開發(fā)比較容易,但由于需要在上一個任務(wù)完成后才能開始新的任務(wù),所以其效率通常比多線程應(yīng)用程序低。如果完成同步任務(wù)所用的時間比預(yù)計(jì)時間長,應(yīng)用程序可能會不響應(yīng)。多線程處理可以同時運(yùn)行多個過程。例如,文字處理器應(yīng)用程序在您處理文檔的同時,可以檢查拼寫(作為單獨(dú)的任務(wù))。由于多線程應(yīng)用程序?qū)⒊绦騽澐殖瑟?dú)立的任務(wù),因此可以在以下方面顯著提高性能:
是否需要創(chuàng)建多線程應(yīng)用程序取決于多個因素。在以下情況下,最適合采用多線程處理:
例如,用于跟蹤 Web 頁上的鏈接并下載滿足特定條件的文件的 Internet 應(yīng)用程序“robot”。這種應(yīng)用程序可以依次同步下載各個文件,也可以使用多線程同時下載多個文件。多線程方法比同步方法的效率高很多,因?yàn)榧词乖谀承┚程中遠(yuǎn)程 Web 服務(wù)器的響應(yīng)非常慢,也可以下載文件。 創(chuàng)建新線程創(chuàng)建線程最直接的方法是創(chuàng)建新的線程類實(shí)例,并使用 AddressOf 語句為要運(yùn)行的過程傳遞委托。例如,以下代碼將名為 SomeTask 的子過程作為單獨(dú)的線程運(yùn)行。 Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)Thread1.Start' 此處的代碼立即運(yùn)行。 以上所述就是創(chuàng)建和啟動線程的方法。在線程 Start 方法調(diào)用之后的任何代碼將立即運(yùn)行,而無需等待前一個線程運(yùn)行結(jié)束。 下表列出了用于控制各個線程的一些方法。
|
溫馨提示:喜歡本站的話,請收藏一下本站!