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 _items; ConcurrentQueue _error; private MessageQueue() { _items = new ConcurrentQueue(); _error = new ConcurrentQueue(); } private static MessageQueue instance; public static MessageQueue Instance { get { if(instance==null) instance = new MessageQueue(); return instance; } } public void Insert(string message) { LogHelper.Debug(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) { LogHelper.Debug(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; } } }