c# - 我想使用条件变量来了解消息队列何时不为空,我想在“HandleMessageQueue”中将其用作线程
问题描述
我想使用条件变量来了解消息队列何时不为空,我想在“HandleMessageQueue”中将其用作线程
private static Queue<Message> messages = new Queue<Message>();
/// <summary>
/// function return the first message
/// </summary>
/// <returns>first message element</returns>
public static Message GetFirst()
{
return messages.Dequeue();
}
在另一个班级:
/// <summary>
/// Function run while the clients connected and handle the queue message
/// </summary>
public static void HandleMessageQueue()
{
// ...
}
解决方案
像这样的东西?
public class EventArgs<T> : EventArgs
{
private T eventData;
public EventArgs(T eventData)
{
this.eventData = eventData;
}
public T EventData
{
get { return eventData; }
}
}
public class ObservableQueue<T>
{
public event EventHandler<EventArgs<T>> EnQueued;
public event EventHandler<EventArgs<T>> DeQueued;
public int Count { get { return queue.Count; } }
private readonly Queue<T> queue = new Queue<T>();
protected virtual void OnEnqueued(T item)
{
if (EnQueued != null)
EnQueued(this, new EventArgs<T>(item));
}
protected virtual void OnDequeued(T item)
{
if (DeQueued != null)
DeQueued(this, new EventArgs<T>(item));
}
public virtual void Enqueue(T item)
{
queue.Enqueue(item);
OnEnqueued(item);
}
public virtual T Dequeue()
{
var item = queue.Dequeue();
OnDequeued(item);
return item;
}
}
并使用它
static void Main(string[] args)
{
ObservableQueue<string> observableQueue = new ObservableQueue<string>();
observableQueue.EnQueued += ObservableQueue_EnQueued;
observableQueue.DeQueued += ObservableQueue_DeQueued;
observableQueue.Enqueue("abc");
observableQueue.Dequeue();
Console.Read();
}
推荐阅读
- azure - 在故障恢复时刷新 Redis 密钥
- python - 使用 python 对数学运算进行基准测试
- android - 如何从响应正文中获取数据?
- python-3.x - 任务是将字符串转换为浮点数,但我的文件仍然是字符串。为什么?
- flutter - 如何将名为“LIstEntries”的类型转换为可迭代
- azure - 无法使用具有自定义 DNS 服务器的专用网络从 Azure 容器实例访问网站
- internet-explorer-11 - 为什么我不能在 IE11 中将全局变量设置为子窗口?
- php - 构建 Laravel 控制器
- linux - nmap 命令列出网络中的 Mac OS x 机器
- python - 在python中输入时出现语法错误?