最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#集合之隊列的用法

 更新時間:2022年04月12日 08:05:32   作者:Ruby_Lu  
這篇文章介紹了C#集合之隊列的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

隊列是其元素按照先進(jìn)先出(FIFO)的方式來處理的集合。
隊列使用System.Collections.Generic名稱空間中的泛型類Queue<T>實現(xiàn)。在內(nèi)部,Queue<T>類使用T類型的數(shù)組,這類似List<T>(http://m.fzitv.net/article/244084.htm)類型。隊列實現(xiàn)ICollection和IEnumerable<T>接口,但沒有實現(xiàn)ICollection<T>接口,所以ICollection<T>接口定義的Add()合Remove()方法不能用于隊列。
Enqueue()方法在隊列的一端添加元素,Dequeue()方法在隊列的另一端讀取和刪除元素。再次調(diào)用Dequeue(),會刪除隊列的下一個元素:

Queue<T>類的方法和屬性:

在創(chuàng)建隊列時,可以使用與List<T>類似的構(gòu)造函數(shù),也可以使用構(gòu)造函數(shù)指定容量。
非泛型Queue類的默認(rèn)構(gòu)造函數(shù)不同,它會創(chuàng)建一個包含32項的空數(shù)組
下面用一個例子演示隊列,使用一個線程將文檔添加到隊列中,用另一個線程從隊列中讀取文檔,并處理:

        //存儲在隊列中的元素是Document類型
          public class Document
          {
            public string Title { get; private set; }
            public string Content { get; private set; }

            public Document(string title, string content)
            {
              this.Title = title;
              this.Content = content;
            }
          }
          
        //DocumentManager類是Queue<Document>外面的一層。用來如何將文檔添加到隊列和從隊列中獲取文檔
          public class DocumentManager
          {
            private readonly Queue<Document> documentQueue = new Queue<Document>();

            //因為多個線程訪問DocumentManager類,所以用lock語句鎖定對隊列的訪問
            
            public void AddDocument(Document doc)
            {
              lock (this)
              {
                documentQueue.Enqueue(doc);
              }
            }

            public Document GetDocument()
            {
              Document doc = null;
              lock (this)
              {
                if (this.IsDocumentAvailable)
                    doc = documentQueue.Dequeue();
              }
              return doc;
            }

            public bool IsDocumentAvailable
            {
              get
              {
                lock (this)
                {
                    return documentQueue.Count > 0;
                }
                        
              }
            }
          }
          
         //使用ProcessDocuments類在一個單獨的任務(wù)中讀取和刪除隊列中的文檔。
          public class ProcessDocuments
          {
            //能從外部訪問的唯一方法是Start()方法
            //在Start()中,實例化一個新任務(wù)。創(chuàng)建一個ProcessDocuments對象,調(diào)用ProcessDocuments的Run()方法
            public static void Start(DocumentManager dm)
            {
              Task.Factory.StartNew(new ProcessDocuments(dm).Run);
            }

            protected ProcessDocuments(DocumentManager dm)
            {
              if (dm == null)
                throw new ArgumentNullException("dm");
              documentManager = dm;
            }

            private DocumentManager documentManager;

            //定義一個無限循環(huán),使用DocumentManager類的IsDocumentAvailable屬性確定隊列中是否還有文檔。
            protected void Run()
            {
              while (true)
              {
                if (documentManager.IsDocumentAvailable)
                {
                  Document doc = documentManager.GetDocument();
                  if(doc != null)
                    Console.WriteLine("Processing document {0}", doc.Title);
                }
                Thread.Sleep(new Random().Next(20));
              }
            }
          }

客戶端代碼

      static void Main()
            {
                var dm = new DocumentManager();

                ProcessDocuments.Start(dm);
                ProcessDocuments.Start(dm);
                // Create documents and add them to the DocumentManager
                for (int i = 0; i < 1000; i++)
                {
                    Document doc = new Document("Doc " + i.ToString(), "content");
                    dm.AddDocument(doc);
                    Console.WriteLine("Added document {0}", doc.Title);
                    Thread.Sleep(new Random().Next(20));
                }

                Console.ReadKey();
            }

到此這篇關(guān)于C#集合之隊列的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決C#中WebBrowser的DocumentCompleted事件不執(zhí)行的實現(xiàn)方法

    解決C#中WebBrowser的DocumentCompleted事件不執(zhí)行的實現(xiàn)方法

    本篇文章是對C#中WebBrowser的DocumentCompleted事件不執(zhí)行解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c#中自定義Base16編碼解碼的方法示例

    c#中自定義Base16編碼解碼的方法示例

    這篇文章主要給大家介紹了關(guān)于c#中自定義Base16編碼解碼的相關(guān)資料,并且給大家分享了C#中16進(jìn)制轉(zhuǎn)換為Base64字符串的方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • c#進(jìn)度條 progressBar 使用方法的小例子

    c#進(jìn)度條 progressBar 使用方法的小例子

    1、創(chuàng)建進(jìn)度條窗口2、在其他窗口中調(diào)用方法ShowProcess(int percent,string message)
    2013-04-04
  • C# 多線程學(xué)習(xí)之基礎(chǔ)入門

    C# 多線程學(xué)習(xí)之基礎(chǔ)入門

    線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實際運作單位。今天小編就帶大家了解一下C#中的多線程,快來學(xué)習(xí)一下吧
    2021-12-12
  • C#數(shù)據(jù)庫操作小結(jié)

    C#數(shù)據(jù)庫操作小結(jié)

    每次做項目都會用到數(shù)據(jù)庫,對數(shù)據(jù)庫的操作都是糊里糊涂從書里找代碼用。通過昨天晚上與今天早上的努力,把數(shù)據(jù)庫的操作整理了一下,下面把整理結(jié)果做個小結(jié)
    2012-09-09
  • C#之如何實現(xiàn)多個子窗體切換效果

    C#之如何實現(xiàn)多個子窗體切換效果

    這篇文章主要介紹了C#之如何實現(xiàn)多個子窗體切換的效果,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#實現(xiàn)字符串格式化的示例代碼

    C#實現(xiàn)字符串格式化的示例代碼

    在日常編程中,經(jīng)常需要對字符串進(jìn)行格式化操作,以便呈現(xiàn)為不同的格式,本文主要為大家詳細(xì)介紹了C#實現(xiàn)字符串格式化的相關(guān)知識,希望對大家有所幫助
    2023-12-12
  • c#多線程通信之委托事件

    c#多線程通信之委托事件

    這篇文章主要介紹了c#多線程通信之委托事件,對多線程感興趣的同學(xué)可以參考下
    2021-04-04
  • C#基礎(chǔ) 延遲加載介紹與實例

    C#基礎(chǔ) 延遲加載介紹與實例

    C#基礎(chǔ) 延遲加載介紹與實例,有效使用它可以大大提高系統(tǒng)性能,需要的朋友可以參考一下
    2013-04-04
  • C#讀寫Excel的流程步驟

    C#讀寫Excel的流程步驟

    這篇文章主要介紹了詳解C#讀寫Excel的流程步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起來學(xué)習(xí)吧
    2023-12-12

最新評論

沙洋县| 新宁县| 万盛区| 玉山县| 海晏县| 霍林郭勒市| 江都市| 阿瓦提县| 乌拉特前旗| 千阳县| 冀州市| 全州县| 曲周县| 铁力市| 乡城县| 兰州市| 娄烦县| 万荣县| 通海县| 玛曲县| 商洛市| 宁化县| 巨鹿县| 高尔夫| 周至县| 南充市| 南汇区| 榆林市| 东乌珠穆沁旗| 翁牛特旗| 纳雍县| 山东省| 巧家县| 四子王旗| 衡南县| 临城县| 石首市| 电白县| 依兰县| 色达县| 莱阳市|