C# 队列(Queue)

C# 队列(Queue)

C# 队列(Queue) | 菜鸟教程 http://www.runoob.com/csharp/csharp-queue.html

C# 集合 C# 集合

队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

Queue 类的方法和属性

下表列出了 Queue 类的一些常用的 属性:

属性         描述

Count       获取 Queue 中包含的元素个数。

下表列出了 Queue 类的一些常用的 方法:

序号         方法名 & 描述

1       public virtual void Clear();

从 Queue 中移除所有的元素。

2       public virtual bool Contains( object obj );

判断某个元素是否在 Queue 中。

3       public virtual object Dequeue();

移除并返回在 Queue 的开头的对象。

4       public virtual void Enqueue( object obj );

向 Queue 的末尾添加一个对象。

5       public virtual object[] ToArray();

复制 Queue 到一个新的数组中。

6       public virtual void TrimToSize();

设置容量为 Queue 中元素的实际个数。

 

实例

下面的实例演示了队列(Queue)的使用:

using System;

using System.Collections;

 

namespace CollectionsApplication

{

   class Program

   {

      static void Main(string[] args)

      {

         Queue q = new Queue();

 

         q.Enqueue('A');

         q.Enqueue('M');

         q.Enqueue('G');

         q.Enqueue('W');

        

         Console.WriteLine("Current queue: ");

         foreach (char c in q)

            Console.Write(c + " ");

         Console.WriteLine();

         q.Enqueue('V');

         q.Enqueue('H');

         Console.WriteLine("Current queue: ");        

         foreach (char c in q)

            Console.Write(c + " ");

         Console.WriteLine();

         Console.WriteLine("Removing some values ");

         char ch = (char)q.Dequeue();

         Console.WriteLine("The removed value: {0}", ch);

         ch = (char)q.Dequeue();

         Console.WriteLine("The removed value: {0}", ch);

         Console.ReadKey();

      }

   }

}

当上面的代码被编译和执行时,它会产生下列结果:

Current queue:

A M G W

Current queue:

A M G W V H

Removing values

The removed value: A

The removed value: M

以下是一个基于C#队列串口通信示例: ```csharp using System; using System.IO.Ports; using System.Threading; namespace QueueSerialCommunication { class Program { static bool _continue; static SerialPort _serialPort; static Queue<string> _messageQueue = new Queue<string>(); // 用于存储发送的消息队列 static void Main(string[] args) { string portName = "COM1"; // 修改为实际的串口号 int baudRate = 9600; // 修改为实际的波特率 _serialPort = new SerialPort(); _serialPort.PortName = portName; _serialPort.BaudRate = baudRate; _serialPort.ReadTimeout = 500; _serialPort.WriteTimeout = 500; _serialPort.Open(); _continue = true; // 启动消息发送线程 Thread sendThread = new Thread(new ThreadStart(SendMessage)); sendThread.Start(); // 启动消息接收线程 Thread receiveThread = new Thread(new ThreadStart(ReceiveMessage)); receiveThread.Start(); Console.WriteLine("Press any key to exit."); Console.ReadKey(); _continue = false; sendThread.Join(); receiveThread.Join(); _serialPort.Close(); } static void SendMessage() { while (_continue) { if (_messageQueue.Count > 0) { string message = _messageQueue.Dequeue(); _serialPort.WriteLine(message); Console.WriteLine("Sent: " + message); } Thread.Sleep(100); // 等待一段时间再发送下一条消息 } } static void ReceiveMessage() { while (_continue) { try { string message = _serialPort.ReadLine(); Console.WriteLine("Received: " + message); } catch (TimeoutException) { } } } static void EnqueueMessage(string message) { _messageQueue.Enqueue(message); } } } ``` 这个示例程序创建了一个串口对象并打开串口。它使用两个线程,一个用于发送消息,另一个用于接收消息。发送的消息存储在一个队列中,发送线程每次从队列中取出一条消息进行发送。接收线程不断从串口中读取数据并输出到控制台。 你可以在`EnqueueMessage`方法中将要发送的消息添加到队列中,例如: ```csharp EnqueueMessage("Hello, world!"); ``` 串口通信需要注意的一些问题: - 确保串口配置正确,包括波特率、数据位、停止位、校验位等。 - 发送和接收的消息必须按照约定的协议格式进行编码和解码。 - 发送的消息必须包含结束符,例如换行符或者特定的字符,接收时需要根据结束符进行分包处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值