Dispenser/DispenserCommon/Queue/BitmapQueue.cs

63 lines
1.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Concurrent;
using System.Drawing;
namespace DispenserCommon.Queue;
public class BitmapQueue
{
private bool _isProcessing;
private readonly ConcurrentQueue<Bitmap> _queue = new();
private readonly Action<Bitmap> ImageProcessor;
public BitmapQueue(Delegate @delegate)
{
ImageProcessor = (Action<Bitmap>)@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); });
}
}