using System.Collections.Concurrent; using System.Drawing; namespace DispenserCommon.Queue; public class BitmapQueue { private bool _isProcessing; private readonly ConcurrentQueue _queue = new(); private readonly Action ImageProcessor; public BitmapQueue(Delegate @delegate) { ImageProcessor = (Action)@delegate; ; } public void Clear() { _queue.Clear(); } // 将BitmapItem加入队列 public void Enqueue(Bitmap item) { _queue.Enqueue(item); StartProcessing(); // 尝试开始处理(如果尚未开始) } // 开始处理队列中的BitmapItem private void StartProcessing() { if (_isProcessing) return; _isProcessing = true; Task.Run(ProcessQueue).ContinueWith(t => { // 处理完成后的逻辑(如果有的话) _isProcessing = false; }); } // 异步处理队列 private async Task ProcessQueue() { while (_queue.TryDequeue(out var item)) try { // 这里处理Bitmap,例如保存、修改等 await ProcessBitmapAsync(item); } finally { // 确保释放资源 item.Dispose(); } } private Task ProcessBitmapAsync(Bitmap item) { return Task.Run(() => { ImageProcessor(item); }); } }