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

C#集合之隊列的用法

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

隊列是其元素按照先進先出(FIFO)的方式來處理的集合。
隊列使用System.Collections.Generic名稱空間中的泛型類Queue<T>實現(xiàn)。在內(nèi)部,Queue<T>類使用T類型的數(shù)組,這類似List<T>(http://www.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類的默認構(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í)行解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • c#中自定義Base16編碼解碼的方法示例

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

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

    c#進度條 progressBar 使用方法的小例子

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

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

    線程(英語:thread)是操作系統(tǒng)能夠進行運算調(diào)度的最小單位。它被包含在進程之中,是進程中的實際運作單位。今天小編就帶大家了解一下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)常需要對字符串進行格式化操作,以便呈現(xiàn)為不同的格式,本文主要為大家詳細介紹了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的流程步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起來學(xué)習(xí)吧
    2023-12-12

最新評論

城市| 准格尔旗| 额济纳旗| 贵港市| 神池县| 枝江市| 赞皇县| 临沂市| 定结县| 长海县| 湘潭市| 石河子市| 铜陵市| 六枝特区| 丰镇市| 蒙山县| 姚安县| 轮台县| 贡觉县| 三穗县| 长岛县| 嵊州市| 花莲市| 潞西市| 武冈市| 绥棱县| 理塘县| 上饶县| 新巴尔虎右旗| 乳源| 汉中市| 黄梅县| 阳信县| 陕西省| 浦东新区| 白城市| 雷州市| 阿图什市| 安庆市| 广汉市| 彭山县|