熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

與VB .NET一起使用.NET Framework

2013-11-13 09:47:58  來源: .NET編程 

  使用NET FrameworkMicrosoft Visual Basic開發人員可以創建健壯的在先前的Visual Basic版本中很難編寫的應用程序 本文將討論使用NET Framework的好處並且將包括一些功能強大的Visual Basic開發人員可以與該框架一起使用的特性包括多線程和線程池(thread pooling)Windows服務和文件系統監控等

為什麼使用框架

  單詞框架(framework)有幾種含意在這種情況中它指的是創建和運行應用程序的基礎擁有這樣的基礎使得創建應用程序變得更容易而同時使用了一個一致的簡化的程序設計模型

  作為一個Visual Basic 開發人員你對於這種程序設計語言感覺很滿意它使得創建各種應用程序變得很容易Visual Basic語言本身提供了固有的數據類型如 Integer Long和String以及一些最常用的函數如字符串處理和數據類型轉換等當你的應用程序變得更復雜時你可以使用Win API來完成標准的Visual Basic函數所不能實現的功能如獲取任意的注冊鍵和數值在許多情況中你還可以使用COM(Component Object Model組件對象模型)組件庫來擴展應用程序的功能最明顯的例子是ADO(ActiveX Data Objects)庫你的應用程序可以使用它來進行數據訪問

  雖然Visual Basic足夠靈活可以提供這些不同的可擴展性機制但這種靈活性仍然需要你學習幾種復雜的API體系結構你需要了解Win如何工作以及如何在Visual Basic中調用它們這可能會是一個既費時又容易出錯的任務你還需要了解如何在Visual Basic中使用各種COM組件每個COM組件都有一個不同的對象模型

  最後當你使用Win APIADO也可能使用許多其他COM組件創建自己的Visual Basic應用程序時你需要管理這些應用程序的部署以及它們的相關性一個典型的Visual Basic應用程序的相關性列表所包括的遠遠多於Visual Basic運行時(runtime);它必須包括應用程序使用的所有對象庫如ADO

  公共框架背後的想法是解決這些問題並使得用戶創建健壯的應用程序變得更容易而無需學習多種不同的API體系結構並且無需部署和處理多種對象庫的版本問題

什麼是NET Framework

  術語NET Framework指的是構成Microsoft NET平台開發基礎的一組技術這一組中的關鍵技術是運行時(runtime)和類庫

  運行時負責管理代碼在執行時向它提供服務這與Visual Basic 運行時的作用類似NET程序設計語言包括Visual Basic NETMicrosoft Visual C#C++管理的擴展以及多種來自不同開發商的程序設計語言通過一組公共的統一類來利用各種服務和特性

  NET統一類提供了創建應用程序的基礎而不管你使用何種語言無論你只是簡單地連接一個字符串還是創建一個Windows服務或多層的基於網絡的應用程序你都要用到這些統一類

  統一類為訪問平台的功能性提供了一種一致的方法一旦你學會了使用類庫你就會發現所有任務都遵循同一個一致的體系結構要編寫自己的應用程序你無需學習和掌握不同的API體系結構

  由於NET Framework部署Visual Basic NET應用程序變得更容易了與Visual Basic 應用程序不同你無需配置各種相關性如單獨的數據訪問庫XML語法分析器和網絡API因為所有這些功能都是NET Framework的組成部分

  通過在統一的集成的框架上創建自己的應用程序你可以實現學習這種框架所花費時間的最大回報並且你將擁有更多容易部署和使用的健壯的應用程序

NET Framework與Visual Basic NET

  Visual Basic 運行時在簡化許多公共的程序設計任務方面非常重要但是簡化這一層意味著在擁有Visual Basic可以使用的打包程序之前你不能使用新的操作系統特性如DirectX作為一個Visual Basic開發人員你從NET Framework獲得的最重要的益處是可以使用一致的程序設計模型既直接又容易地訪問NET平台這意味著你可以使用Visual Basic NET創建很難或不可能使用Visual Basic 創建的應用程序作為一個Visual Basic 開發人員現在你將對能夠使用與其他平台語言相同的特性和功能而贊賞不已例如為了創建Windows服務你無須再用Microsoft Visual C++來編寫它你也無須求助於黑客或組裝機你可以優雅干淨容易地使用Visual Basic NET完成這項工作為了給你一些使用NET Framwork的例子我們將討論在你的應用程序中可能需要執行的個常見任務跟蹤與事件記錄多線程文件系統監控和創建Windows服務

跟蹤與事件記錄

  當創建一個健壯的應用程序的時候你必須密切注意診斷和故障排除機制代表性地這包括編寫處理打開輸出目標(事件記錄或文件)的跟蹤組件編寫跟蹤消息和關閉輸出目標然後通過自己的代碼調用關於這個組件的方法將文本傳遞給記錄你將所有的時間和精力花在了創建跟蹤和記錄子系統上這最終並不會對解決商務問題有所貢獻但這是創建應用程序所必需的

  NET Framework包括類和其他數據類型通過向你提供記錄基礎設施使得記錄跟蹤消息變得很容易給出了用於跟蹤的NET Framework類

  類是SystemDiagnostics名稱空間的一部分Trace類提供了幾個共享的方法例如Write方法允許你記錄特定消息而Assert方法允許你在特定的條件為假的情況下記錄一條消息Trace類將消息輸出到Listeners集合中的對象這個集合中的每個對象都屬於繼承自TraceListener的一個類EventLogTraceListener 將消息寫入事件記錄而TextWriterTraceListener則是將消息寫入到一個文本文件中默認情況下DefaultTraceListener的一個實例被添加到Trace類的Listeners集合中

  除了標准的監聽程序以外你可以實施自己跟蹤監聽程序例如你希望接收來自在防火牆後面的遠程機器上運行的應用程序的跟蹤輸出你可以編寫一個跟蹤監聽程序通過HTTP全球向你的服務器發送跟蹤消息這將會影響你的應用程序的性能但只會在啟用跟蹤時才會對性能有所影響

  代表性地你需要有能力在編譯的二進制文件中包括或去除跟蹤代碼為了在Visual Basic 中做到這一點你需要使用編譯常量並在#If語句中包含所有的跟蹤代碼這使得代碼很難理解和維護利用NET Framework你只需在項目屬性(Project Properties)對話框中將TRACE編譯常量設為on或off狀態你無需在#If語句中包括跟蹤代碼

  另一個普遍期望的跟蹤特性是跟蹤水平設置這包括不同的跟蹤設置例如 Severe(嚴重)Error(錯誤)Warning(警告)和Information(信息)這些設置對記錄哪些信息進行控制你可以使用跟蹤組件啟動時所讀取的注冊表數值對此進行控制對於NET Framework這是完全內置的功能你可以設置一個注冊表數值來控制你當前的應用程序的記錄水平比如只有在跟蹤水平被設置為Severe(嚴重)的情況下才使用TraceWriteIf和TraceWriteLineIf來記錄消息

  集成的跟蹤和記錄特性極大地增強了生產力因為你只需使用內置的特性將精力集中在編寫真正的應用程序代碼上

  多線程應用程序

  NET Framework的一個很重要的特性是可以在不使用第三方工具或不支持的Visual Basic技巧情況下使用Visual Basic創建多線程應用程序NET Framework的多線程支持是由SystemThreading名稱空間中的類和接口提供的因此所有的NET語言都能夠以相同的方式創建和處理線程SystemThreadingThread是一個核心類提供了對創建和控制線程的支持要創建一個線程你可以創建一個新的SystemThreadingThread對象將構造函數傳遞給ThreadStart代理這個代理提供了這個線程開始執行的方法當你准備啟動這個新的線程時可以調用ThreadStart() (請參閱清單)

  當你開始創建多線程應用程序時你很快就會認識到需要控制對共享資源的訪問如共享的類變量NET Framework還包括幾個類和數據類型你可以使用它們對兩個線程執行的動作進行同步

  在最簡單的情況中你由一個需要從不同的線程中進行更新的共享變量要這樣做你可以使用SystemThreadingInterlocked類例如你可以通過編寫InterlockedIncrement(num)或InterlockedDecrement(num)分別使名為num的共享變量遞增或遞減你還可以使用Interlocked將變量設為某一特定值或檢查兩個變量是否相等除了這種簡單情況以外你可以使用NET Framework類來執行更復雜的線程同步如事件和互斥體的同步所有都來自於NET Framework內部而無須使用Win API

Imports SystemIO
注釋The namespace SystemThreading
注釋contains the Thread class
Imports SystemThreading
Module Module
Private count As Long
Sub Main()
注釋Create the ThreadStart delegate
Dim tStart As ThreadStart = New _
ThreadStart(AddressOf StartCounting)
注釋Create the thread
Dim t As Thread = New Thread(tStart)
ConsoleWriteLine(Enter q to quit)
tStart() 注釋start the thread
While (ConsoleRead() <> asc(q))
注釋repeat the loop until the user enters q
End While
tStop() 注釋tell thread to stop processing
tJoin() 注釋wait until the thread finishes
End Sub
Sub StartCounting()
Do
注釋use InterlockedIncrement in case
注釋another thread is accessing the same variable
InterlockedIncrement(count)
ConsoleWriteLine( _
After incrementing count is : count)
ThreadSleep()
Loop
End Sub
End Module

    清單 使用Visual Basic NET創建線程

  你創建了一個新線程將它傳遞給一個ThreadStart代理然後調用ThreadStart()啟動這個線程你可以通過調用ThreadStop()來中止這個線程然後調用ThreadJoin()等待它完成關閉操作一個線程可以使用SystemThreadingInterlocked來使變量遞增或遞減

  此外NET Framework提供了一個方便的機制來對工作排隊並將起分配給線程池中的某個線程在處理多個並發工作項目或工作請求的服務器應用程序中這非常有用例如對於等待輸入文件然後將它們導入到數據庫中去的應用程序可能會對每個輸入文件進行排隊以在線程池中的某個單獨的線程上進行處理SystemThreadingThreadPool類允許你使用共享的QueueUserWorkItem方法對工作進行排隊以前要這樣做你必須得創建和管理自己的線程池你又需要在基礎設施工作而不是在解決商務問題上花大量的時間和精力

文件系統監控

  我曾經遇到過一些應用程序需要等待和處理某個特定目錄中的文件例如將數據從文件導入到數據庫中去的應用程序數據文件可以從某個大型機上下載或者被轉移到某個輸入目錄中該應用程序將它們導入到數據庫中你不用經常地輪詢該目錄檢查是否有新文件可以等待生成新文件的通知你可以在Visual Basic 中使用Win API來做到這一點而在Visual Basic NET中你可以使用NET Framework類來做這項工作但是在NET中實施文件監控與在NET中完成其他工作的方法更加一致因此學習曲線是最小的

  你可以使用SystemIOFileSystemWatcher NET類對文件系統進行監視它提供了一些屬性允許你設置監控的路徑指定是對文件還是子目錄層次的變化感興趣SystemIOFileSystemWatcher還允許你指定需要監控的文件名和文件類型(例如*xml是指監控所有XML文件的變化)最後你可以指定感興趣的變化類型例如只對新建文件文件屬性的變化或文件大小的變化(請參閱清單)感興趣

  在你設置了監控內容後你需要鉤住用於感興趣的各種事件的事件處理程序FileSystemWatcher事件有ChangedCreatedDeletedError和Renamed要處理某個事件首先你需要編寫一個與FileSystemEventHandler代理相同聲明的事件處理程序然後將這個處理程序添加到FileSystemWatcher類中這個基於代理的體系結構允許你為同一個事件添加多個處理程序或者對於多個事件使用同一個處理程序而你不能使用Visual Basic 做到這一點

注釋SystemIO contains the
注釋file monitoring classes and types
Imports SystemIO
Module 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
 fwPath = C:WINNT
 注釋tell it whether to watch files or directories
 fwTarget = WatcherTargetFile
 注釋tell it whether to include subdirs
 fwIncludeSubdirectories = False
 注釋hook up handlers
 AddHandler fwCreatedNew FileSystemEventHandler(AddressOf OnFileNotify)
 注釋enable the watcher
 fwEnabled = True
 Do
  ConsoleWriteLine(Beginning to monitor)
   注釋this is where we actually wait
  注釋waiting blocks execution for the specified timeout
  result = fwWaitForChanged(WatcherChangeTypesAll )
  ConsoleWriteLine(Hit Enter to continue q to quit)
 Loop While (ConsoleReadLine <> 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)
  ConsoleWriteLine( Notification received for file change type is _
    eFullPath eChangeType)
 End Sub
End Module

    清單 使用FileSystemWatcher監控某個文件夾是否有新文件

  你可以創建一個FileSystemWatcher然後設置它的屬性你可以使用AddHandler將FileSystemEventHandler代理與各種FileSystemWatcher事件關聯起來如Created然後你就可以啟用FileSystemWatcher然後調用WaitForChanged該調用將在變化發生或達到指定的超時時返回

創建Windows服務

  當你要創建一個Windows服務時你必須使用Visual C++或在Visual Basic中使用srvanyexe或第三方工具來創建該服務任何一種方法你都沒有在Visual Basic中編寫自己的服務你只是正在Visual Basic運行時的外部添加更多從屬組件

  如果你使用C++或C語言在不使用活動模版庫(Active Template Library)的情況下從頭編寫一個Windows服務你將不得不編寫一小段代碼來協調你的服務與服務控制器(Service Control ManagerSCM)之間的往來通信SCM用來處理服務的啟動暫停繼續和停止NET Framework通過提供SystemServiceProcessServiceBase類使得實現一個服務變得很容易要編寫一個服務你可以從這個類繼承重載它的某些方法設置它的屬性然後就大功告成了!

  你可能要重載的一些方法包括OnStartOnStopOnPause和OnContinue通常你需要載啟動工作線程(worker thread)的位置重載OnStart在需要取消這個工作線程的位置重載OnStop在你創建了自己的服務後你就可以使用SCM安裝和注冊這個服務這是另一個領域NET Framework中的基類提供了大部分所需的工作你可以創建一個繼承自SystemConfigurationInstallInstaller的類從SystemServiceProcessServiceInstaller中例示對象然後設置它的屬性如服務啟動模式和服務名稱這使得NET安裝實用工具installUtilexe能夠安裝(和刪除)你的服務而你無需編寫額外的代碼

  當你開始使用Visual Studio NET時你將會發現Visual Studio NET使得使用NET Framework變得更容易Visual Studio NET允許你創建Windows服務(擁有安裝程序(installer))監控文件系統的變化寫入事件記錄 所有都是使用設計器和組件而不是編寫代碼來完成例如要將一個安裝程序添加到自己的服務項目中你只需選中服務設計器避免然後單擊屬性(Properties)窗口(見圖)底部的添加安裝程序(Add Installer)這將添加一個新模塊ProjectInstallervb該模塊包括安裝該服務所需的全部代碼你可以使用設計器(見圖)對安裝選項如啟動模式進行自定義

結論

  NET Framework使得你能夠利用Visual Basic NET很容易地開發健壯地應用程序它使得你可以將重點放在學習一種相容的程序設計模型上並且使得你可以直接訪問底層的NET平台利用Visual Basic NET和NET Framework你可以使自己的應用程序達到前所未有的水平


From:http://tw.wingwit.com/Article/program/net/201311/11618.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.