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

使用基本類庫

2022-06-13   來源: .NET編程 


  為了更好地理解C#與C++的區別和解決問題方式的變化我們先來看一個比較簡單的例子我們將創建一個讀取文本文件的類並在屏幕上顯示其內容我將把它做成多線程程序以便在從磁盤上讀取數據時還可以做其他的工作

  在C++中我們可能會創建一個讀文件的線程和另一個做其他工作的線程這二個線程將各自獨立地運行但可能會需要對它們進行同步在C#中我們也可以完成同樣的工作由於NET框架提供了功能強大的異步I/O機制在編寫線程時我們會節省不少的時間

  異步I/O支持是內置在CLR中的而且幾乎與使用正常的I/O流類一樣簡單在程序的開始我們首先通知編譯器我們將在程序中使用許多名字空間中的對象 

           usingSystem; 
           usingSystemIO; 
           usingSystemText;

  在程序中包含System並不會自動地包含其所有的子名字空間必須使用using關健字明確地包含每個子名字空間我們在例子中會用到I/O流類因此需要包含SystemIO名字空間我們還需要SystemText名字空間支持字節流的ASCII編碼

  由於NET架構為完成了大部分的工作編寫這一程序所需的步驟相當簡單我們將用到Stream類的BeginRead方法它提供異步I/O功能將數據讀入到一個緩沖區中當緩沖區可以處理時調用相應的處理程序

  我們需要使用一個字節數組作為緩沖區和回叫方法的代理並將這二者定義為驅動程序類的private成員變量 

           publicclassAsynchIOTester 
           { 
           privateStreaminputStream; 
           privatebyte[]buffer; 
           privateAsyncCallbackmyCallBack;

  inputStream是一個Stream類型的變量我們將對它調用BeginRead方法代理與成員函數的指針非常相似代理是C#的第一類元素

  當緩沖區被磁盤上的文件填滿時NET將調用被代理的方法對數據進行處理在等待讀取數據期間我們可以讓計算機完成其他的工作(在本例中是將個整型變量由增加到但在實際的應用程序中我們可以讓計算機與用戶進行交互或作其他有意義的工作

  本例中的代理被定義為AsyncCallback類型的過程這是Stream的BeginRead方法所需要的System空間中AsyncCallback類型代理的定義如下所示 

           publicdelegatevoidAsyncCallback(IAsyncResultar);

  這一代理可以是與任何返回void類型值將IAsyncResult界面作為參數的方法相關聯的在該方法被調用時CLR可以在運行時傳遞IAsyncResult界面對象作為參數我們需要如下所示的形式定義該方法 

           voidOnCompletedRead(IAsyncResultasyncResult)

  然後在構造器中與代理連接起來 

           AsynchIOTester() 
           { 
           ??? 
           myCallBack=newAsyncCallback(thisOnCompletedRead);
           }

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