You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.2 KiB
C#

2 years ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using System.Windows.Forms;
namespace Rs.Framework
{
public class MessageQueue
{
ConcurrentQueue<MessageItem> _items;
ConcurrentQueue<MessageItem> _error;
private MessageQueue()
{
_items = new ConcurrentQueue<MessageItem>();
_error = new ConcurrentQueue<MessageItem>();
}
private static MessageQueue instance;
public static MessageQueue Instance
{
get
{
if(instance==null)
instance = new MessageQueue();
return instance;
}
}
public void Insert(string message)
{
if (_items.Count>1000)
_items.TryDequeue(out _);
MessageItem item = new MessageItem();
item.Time = DateTime.Now.ToString("HH:mm:ss fff");
item.Content=message;
_items.Enqueue(item);
}
public bool HaveMessage()
{
return (_items.Count + _error.Count) > 0;
}
public void Insert(MessageItem message)
{
_items.Enqueue(message);
}
public void Warn(string errInfo)
{
if (_error.Count > 1000)
_error.TryDequeue(out _);
MessageItem item = new MessageItem();
item.Time = DateTime.Now.ToString("HH:mm:ss fff");
item.Content = errInfo;
_error.Enqueue(item);
}
public MessageItem GetWarn()
{
if (_error.Count > 0)
{
if (_error.TryDequeue(out MessageItem item))
return item;
}
return null;
}
public MessageItem GetMessage()
{
if(_items.Count>0)
{
if (_items.TryDequeue(out MessageItem item))
return item;
}
return null;
}
}
public class MessageItem
{
public string Time { get; set; }
public string Content { get; set; }
}
}