vb.net使用線程池的簡單介紹

與VB .NET一起使用.NET Framework

使用 NET Framework Microsoft Visual Basic開發(fā)人員可以創(chuàng)建健壯的 在先前的Visual Basic版本中很難編寫的應(yīng)用程序 本文將討論使用 NET Framework的好處 并且將包括一些功能強(qiáng)大的 Visual Basic開發(fā)人員可以與該框架一起使用的特性 包括多線程和線程池(thread pooling) Windows服務(wù)和文件系統(tǒng)監(jiān)控等 為什么使用框架 單詞框架(framework)有幾種含意 在這種情況中 它指的是創(chuàng)建和運(yùn)行應(yīng)用程序的基礎(chǔ) 擁有這樣的基礎(chǔ)使得創(chuàng)建應(yīng)用程序變得更容易 而同時(shí)使用了一個(gè)一致的 簡化的程序設(shè)計(jì)模型 作為一個(gè)Visual Basic 開發(fā)人員 你對于這種程序設(shè)計(jì)語言感覺很滿意 它使得創(chuàng)建各種應(yīng)用程序變得很容易 Visual Basic語言本身提供了固有的數(shù)據(jù)類型 如 Integer Long和String 以及一些最常用的函數(shù) 如字符串處理和數(shù)據(jù)類型轉(zhuǎn)換等 當(dāng)你的應(yīng)用程序變得更復(fù)雜時(shí) 你可以使用Win API來完成標(biāo)準(zhǔn)的Visual Basic函數(shù)所不能實(shí)現(xiàn)的功能 如獲取任意的注冊鍵和數(shù)值 在許多情況中 你還可以使用(Component Object Model 組件對象模型)組件庫來擴(kuò)展應(yīng)用程序的功能 最明顯的例子是ADO(ActiveX Data Objects)庫 你的應(yīng)用程序可以使用它來進(jìn)行數(shù)據(jù)訪問 雖然Visual Basic足夠靈活 可以提供這些不同的可擴(kuò)展性機(jī)制 但這種靈活性仍然需要你學(xué)習(xí)幾種復(fù)雜的API體系結(jié)構(gòu) 你需要了解Win 如何工作 以及如何在Visual Basic中調(diào)用它們 這可能會(huì)是一個(gè)既費(fèi)時(shí)又容易出錯(cuò)的任務(wù) 你還需要了解如何在Visual Basic中使用各種組件 每個(gè)組件都有一個(gè)不同的對象模型 最后 當(dāng)你使用Win API ADO 也可能使用許多其他組件 創(chuàng)建自己的Visual Basic應(yīng)用程序時(shí) 你需要管理這些應(yīng)用程序的部署以及它們的相關(guān)性 一個(gè)典型的Visual Basic應(yīng)用程序的相關(guān)性列表所包括的遠(yuǎn)遠(yuǎn)多于Visual Basic運(yùn)行時(shí)(runtime);它必須包括應(yīng)用程序使用的所有對象庫 如ADO 公共框架背后的想法是解決這些問題 并使得用戶創(chuàng)建健壯的應(yīng)用程序變得更容易 而無需學(xué)習(xí)多種不同的API體系結(jié)構(gòu) 并且無需部署和處理多種對象庫的版本問題 什么是 NET Framework 術(shù)語 NET Framework指的是構(gòu)成Microsoft NET平臺(tái)開發(fā)基礎(chǔ)的一組技術(shù) 這一組中的關(guān)鍵技術(shù)是運(yùn)行時(shí)(runtime)和類庫 運(yùn)行時(shí)負(fù)責(zé)管理代碼 在執(zhí)行時(shí)向它提供服務(wù) 這與Visual Basic 運(yùn)行時(shí)的作用類似 NET程序設(shè)計(jì)語言 包括Visual Basic NET Microsoft Visual C# C++管理的擴(kuò)展 以及多種來自不同開發(fā)商的程序設(shè)計(jì)語言 通過一組公共的統(tǒng)一類來利用各種服務(wù)和特性 NET統(tǒng)一類提供了創(chuàng)建應(yīng)用程序的基礎(chǔ) 而不管你使用何種語言 無論你只是簡單地連接一個(gè)字符串 還是創(chuàng)建一個(gè)Windows服務(wù)或多層的基于網(wǎng)絡(luò)的應(yīng)用程序 你都要用到這些統(tǒng)一類 統(tǒng)一類為訪問平臺(tái)的功能性提供了一種一致的方法 一旦你學(xué)會(huì)了使用類庫 你就會(huì)發(fā)現(xiàn)所有任務(wù)都遵循同一個(gè)一致的體系結(jié)構(gòu) 要編寫自己的應(yīng)用程序 你無需學(xué)習(xí)和掌握不同的API體系結(jié)構(gòu) 由于 NET Framework 部署Visual Basic NET應(yīng)用程序變得更容易了 與Visual Basic 應(yīng)用程序不同 你無需配置各種相關(guān)性 如單獨(dú)的數(shù)據(jù)訪問庫 XML語法分析器和網(wǎng)絡(luò)API 因?yàn)樗羞@些功能都是 NET Framework的組成部分 通過在統(tǒng)一的 集成的框架上創(chuàng)建自己的應(yīng)用程序 你可以實(shí)現(xiàn)學(xué)習(xí)這種框架所花費(fèi)時(shí)間的最大回報(bào) 并且你將擁有更多容易部署和使用的健壯的應(yīng)用程序 NET Framework與Visual Basic NET Visual Basic 運(yùn)行時(shí)在簡化許多公共的程序設(shè)計(jì)任務(wù)方面非常重要 但是簡化這一層意味著 在擁有Visual Basic可以使用的打包程序之前 你不能使用新的操作系統(tǒng)特性 如DirectX 作為一個(gè)Visual Basic開發(fā)人員 你從 NET Framework獲得的最重要的益處是 可以使用一致的程序設(shè)計(jì)模型既直接又容易地訪問 NET平臺(tái) 這意味著 你可以使用Visual Basic NET創(chuàng)建很難或不可能使用Visual Basic 創(chuàng)建的應(yīng)用程序 作為一個(gè)Visual Basic 開發(fā)人員 現(xiàn)在你將對能夠使用與其他平臺(tái)語言相同的特性和功能而贊賞不已 例如 為了創(chuàng)建Windows服務(wù) 你無須再用Microsoft Visual C++來編寫它 你也無須求助于黑客或組裝機(jī) 你可以優(yōu)雅 干凈 容易地使用Visual Basic NET完成這項(xiàng)工作 為了給你一些使用 NET Framwork的例子 我們將討論在你的應(yīng)用程序中可能需要執(zhí)行的 個(gè)常見任務(wù) 跟蹤與事件記錄 多線程 文件系統(tǒng)監(jiān)控和創(chuàng)建Windows服務(wù) 跟蹤與事件記錄 當(dāng)創(chuàng)建一個(gè)健壯的應(yīng)用程序的時(shí)候 你必須密切注意診斷和故障排除機(jī)制 代表性地 這包括編寫處理打開輸出目標(biāo)(事件記錄或文件)的跟蹤組件 編寫跟蹤消息和關(guān)閉輸出目標(biāo) 然后通過自己的代碼調(diào)用關(guān)于這個(gè)組件的方法 將文本傳遞給記錄 你將所有的時(shí)間和精力花在了創(chuàng)建跟蹤和記錄子系統(tǒng)上 這最終并不會(huì)對解決商務(wù)問題有所貢獻(xiàn) 但這是創(chuàng)建應(yīng)用程序所必需的 NET Framework包括類和其他數(shù)據(jù)類型 通過向你提供記錄基礎(chǔ)設(shè)施 使得記錄跟蹤消息變得很容易 圖 給出了用于跟蹤的 NET Framework類 類是System Diagnostics名稱空間的一部分 Trace類提供了幾個(gè)共享的方法 例如 Write方法允許你記錄特定消息 而Assert方法允許你在特定的條件為假的情況下記錄一條消息 Trace類將消息輸出到Listeners集合中的對象 這個(gè)集合中的每個(gè)對象都屬于繼承自TraceListener的一個(gè)類 EventLogTraceListener 將消息寫入事件記錄 而TextWriterTraceListener則是將消息寫入到一個(gè)文本文件中 默認(rèn)情況下 DefaultTraceListener的一個(gè)實(shí)例被添加到Trace類的Listeners集合中 除了標(biāo)準(zhǔn)的監(jiān)聽程序以外 你可以實(shí)施自己跟蹤監(jiān)聽程序 例如 你希望接收來自在防火墻后面的遠(yuǎn)程機(jī)器上運(yùn)行的應(yīng)用程序的跟蹤輸出 你可以編寫一個(gè)跟蹤監(jiān)聽程序 通過HTTP全球向你的服務(wù)器發(fā)送跟蹤消息 這將會(huì)影響你的應(yīng)用程序的性能 但只會(huì)在啟用跟蹤時(shí)才會(huì)對性能有所影響 代表性地 你需要有能力在編譯的二進(jìn)制文件中包括或去除跟蹤代碼 為了在Visual Basic 中做到這一點(diǎn) 你需要使用編譯常量 并在#If語句中包含所有的跟蹤代碼 這使得代碼很難理解和維護(hù) 利用 NET Framework 你只需在項(xiàng)目屬性(Project Properties)對話框中將TRACE編譯常量設(shè)為on或off狀態(tài) 你無需在#If語句中包括跟蹤代碼 另一個(gè)普遍期望的跟蹤特性是跟蹤水平設(shè)置 這包括不同的跟蹤設(shè)置 例如 Severe(嚴(yán)重) Error(錯(cuò)誤) Warning(警告)和Information(信息) 這些設(shè)置對記錄哪些信息進(jìn)行控制 你可以使用跟蹤組件啟動(dòng)時(shí)所讀取的注冊表數(shù)值對此進(jìn)行控制 對于 NET Framework 這是完全內(nèi)置的功能 你可以設(shè)置一個(gè)注冊表數(shù)值來控制你當(dāng)前的應(yīng)用程序的記錄水平 比如 只有在跟蹤水平被設(shè)置為Severe(嚴(yán)重)的情況下 才使用Trace WriteIf和Trace WriteLineIf來記錄消息 集成的跟蹤和記錄特性極大地增強(qiáng)了生產(chǎn)力 因?yàn)槟阒恍枋褂脙?nèi)置的特性 將精力集中在編 *** 正的應(yīng)用程序代碼上

創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、怒江州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為怒江州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

多線程應(yīng)用程序 NET Framework的一個(gè)很重要的特性是 可以在不使用第三方工具或不支持的Visual Basic技巧情況下 使用Visual Basic創(chuàng)建多線程應(yīng)用程序 NET Framework的多線程支持是由System Threading名稱空間中的類和接口提供的 因此所有的 NET語言都能夠以相同的方式創(chuàng)建和處理線程 System Threading Thread是一個(gè)核心類 提供了對創(chuàng)建和控制線程的支持 要?jiǎng)?chuàng)建一個(gè)線程 你可以創(chuàng)建一個(gè)新的System Threading Thread對象 將構(gòu)造函數(shù)傳遞給ThreadStart代理 這個(gè)代理提供了這個(gè)線程開始執(zhí)行的方法 當(dāng)你準(zhǔn)備啟動(dòng)這個(gè)新的線程時(shí) 可以調(diào)用Thread Start() (請參閱清單 ) 當(dāng)你開始創(chuàng)建多線程應(yīng)用程序時(shí) 你很快就會(huì)認(rèn)識到需要控制對共享資源的訪問 如共享的類變量 NET Framework還包括幾個(gè)類和數(shù)據(jù)類型 你可以使用它們對兩個(gè)線程執(zhí)行的動(dòng)作進(jìn)行同步 在最簡單的情況中 你由一個(gè)需要從不同的線程中進(jìn)行更新的共享變量 要這樣做 你可以使用System Threading Interlocked類 例如 你可以通過編寫Interlocked Increment(num)或Interlocked Decrement(num)分別使名為num的共享變量遞增或遞減 你還可以使用Interlocked將變量設(shè)為某一特定值 或檢查兩個(gè)變量是否相等 除了這種簡單情況以外 你可以使用 NET Framework類來執(zhí)行更復(fù)雜的線程同步 如事件和互斥體的同步 所有都來自于 NET Framework內(nèi)部 而無須使用Win API Imports System IO注釋 The namespace System Threading注釋 contains the Thread classImports System ThreadingModule Module Private count As LongSub Main()注釋 Create the ThreadStart delegateDim tStart As ThreadStart = New _ ThreadStart(AddressOf StartCounting)注釋 Create the threadDim t As Thread = New Thread(tStart)Console WriteLine( Enter q to quit )t Start() 注釋 start the threadWhile (Console Read() asc( q ))注釋 repeat the loop until the user enters qEnd Whilet Stop() 注釋 tell thread to stop processingt Join() 注釋 wait until the thread finishesEnd SubSub StartCounting()Do注釋 use Interlocked Increment in case 注釋 another thread is accessing the same variableInterlocked Increment(count)Console WriteLine( _ After incrementing count is : count)Thread Sleep( )LoopEnd SubEnd Module 清單 使用Visual Basic NET創(chuàng)建線程 你創(chuàng)建了一個(gè)新線程 將它傳遞給一個(gè)ThreadStart代理 然后調(diào)用Thread Start()啟動(dòng)這個(gè)線程 你可以通過調(diào)用Thread Stop()來中止這個(gè)線程 然后調(diào)用Thread Join()等待它完成關(guān)閉操作 一個(gè)線程可以使用System Threading Interlocked來使變量遞增或遞減 此外 NET Framework提供了一個(gè)方便的機(jī)制來對工作排隊(duì) 并將起分配給線程池中的某個(gè)線程 在處理多個(gè)并發(fā)工作項(xiàng)目或工作請求的服務(wù)器應(yīng)用程序中 這非常有用 例如 對于等待輸入文件 然后將它們導(dǎo)入到數(shù)據(jù)庫中去的應(yīng)用程序 可能會(huì)對每個(gè)輸入文件進(jìn)行排隊(duì) 以在線程池中的某個(gè)單獨(dú)的線程上進(jìn)行處理 System Threading ThreadPool類允許你使用共享的QueueUserWorkItem方法對工作進(jìn)行排隊(duì) 以前要這樣做 你必須得創(chuàng)建和管理自己的線程池 你又需要在基礎(chǔ)設(shè)施工作而不是在解決商務(wù)問題上花大量的時(shí)間和精力 文件系統(tǒng)監(jiān)控 我曾經(jīng)遇到過一些應(yīng)用程序 需要等待和處理某個(gè)特定目錄中的文件 例如 將數(shù)據(jù)從文件導(dǎo)入到數(shù)據(jù)庫中去的應(yīng)用程序 數(shù)據(jù)文件可以從某個(gè)大型機(jī)上下載 或者被轉(zhuǎn)移到某個(gè)輸入目錄中 該應(yīng)用程序?qū)⑺鼈儗?dǎo)入到數(shù)據(jù)庫中 你不用經(jīng)常地輪詢該目錄檢查是否有新文件 可以等待生成新文件的通知 你可以在Visual Basic 中使用Win API來做到這一點(diǎn) 而在Visual Basic NET中你可以使用 NET Framework類來做這項(xiàng)工作 但是在 NET中實(shí)施文件監(jiān)控與在 NET中完成其他工作的方法更加一致 因此學(xué)習(xí)曲線是最小的 你可以使用System IO FileSystemWatcher NET類對文件系統(tǒng)進(jìn)行監(jiān)視 它提供了一些屬性 允許你設(shè)置監(jiān)控的路徑 指定是對文件還是子目錄層次的變化感興趣 System IO FileSystemWatcher還允許你指定需要監(jiān)控的文件名和文件類型(例如 * xml是指監(jiān)控所有XML文件的變化) 最后 你可以指定感興趣的變化類型 例如 只對新建文件 文件屬性的變化或文件大小的變化(請參閱清單 )感興趣 在你設(shè)置了監(jiān)控內(nèi)容后 你需要鉤住用于感興趣的各種事件的事件處理程序 FileSystemWatcher事件有Changed Created Deleted Error和Renamed 要處理某個(gè)事件 首先你需要編寫一個(gè)與FileSystemEventHandler代理相同聲明的事件處理程序 然后將這個(gè)處理程序添加到FileSystemWatcher類中 這個(gè)基于代理的體系結(jié)構(gòu)允許你為同一個(gè)事件添加多個(gè)處理程序 或者對于多個(gè)事件使用同一個(gè)處理程序 而你不能使用Visual Basic 做到這一點(diǎn) 注釋 System IO contains the 注釋 file monitoring classes and typesImports System IOModule Module Sub Main() 注釋 FileSystemWatcher does the real work Dim fw As New FileSystemWatcher() 注釋 WaitForChangedResult is what you  注釋 get back when a change occurs Dim result As WaitForChangedResult 注釋 set the path to monitor fw Path = C:WINNT  注釋 tell it whether to watch files or directories fw Target = WatcherTarget File 注釋 tell it whether to include subdirs fw IncludeSubdirectories = False 注釋 hook up handlers AddHandler fw Created New FileSystemEventHandler(AddressOf OnFileNotify) 注釋 enable the watcher fw Enabled = True DoConsole WriteLine( Beginning to monitor ) 注釋 this is where we actually wait注釋 waiting blocks execution for the specified timeoutresult = fw WaitForChanged(WatcherChangeTypes All )Console WriteLine( Hit Enter to continue q to quit ) Loop While (Console ReadLine q )End Sub注釋 This is the delegate that gets 注釋 called when a file is created Public Sub OnFileNotify(ByVal source As Object ByVal e As FileSystemEventArgs)Console WriteLine( Notification received for file change type is _e FullPath e ChangeType) End SubEnd Module 清單 使用FileSystemWatcher監(jiān)控某個(gè)文件夾是否有新文件

lishixinzhi/Article/program/net/201311/11618

vb.net如何用線程池實(shí)現(xiàn)多線程事件響應(yīng)

這個(gè)沒法做到。原因

1)當(dāng)你將方法排入線程池隊(duì)列后,此方法在有線程池線程變得可用時(shí)執(zhí)行。

2)線程池中某個(gè)線程的可用與不可用,是由.net 后臺(tái)決定,用戶程序無法控制的

3)正如你觀察到的:線程啟動(dòng)的時(shí)間不同,有快有慢,這恰恰說明線程池起作用了:線程池的調(diào)度試圖讓程序響應(yīng)達(dá)到最佳。

在vb.net中,多線程如何使用

Sub Main() Dim thr As New Thread(AddressOf 循環(huán)) thr.Start("a") End Sub Sub 循環(huán)(a() As String) '這里隨你干什么循環(huán)也行 For Each i As String In a MsgBox(i) Next End Sub

多線程 線程池 VB.NET

這個(gè)沒法做到。原因

1)當(dāng)你將方法排入線程池隊(duì)列后,此方法在有線程池線程變得可用時(shí)執(zhí)行。

2)線程池中某個(gè)線程的可用與不可用,是由.net 后臺(tái)決定,用戶程序無法控制的

3)正如你觀察到的:線程啟動(dòng)的時(shí)間不同,有快有慢,這恰恰說明線程池起作用了:線程池的調(diào)度試圖讓程序響應(yīng)達(dá)到最佳。

名稱欄目:vb.net使用線程池的簡單介紹
文章出自:http://muchs.cn/article46/dohdihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、用戶體驗(yàn)、服務(wù)器托管品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司