当接收到硬件设备传来的数据队列时,比如拍到的一幅幅照片,需要按顺序调用识别模块时,就需要用队列来缓存调用的方法。示例代码如下:
bool isCanShiBie = true, isStartThread=true;
static Queue<Action> queue = new Queue<Action>(); // 创建一个线程安全的队列
private void button1_ClickAsync(object sender, EventArgs e)
{
if (isStartThread)
{
// 创建并启动一个消费者线程来处理队列中的任务
Thread consumerThread = new Thread(ProcessQueue);
consumerThread.Start();
isStartThread = false;
}
// 将任务添加到队列中
EnqueueTask(ShiBie);
//Thread td = new Thread(ShiBie);
//td.IsBackground = true;
//td.Start();
// ShiBie();
// 在线程中调用异步方法
// ThreadPool.QueueUserWorkItem( ShiBie, 1);
//Thread thread = new Thread(() =>
//{
// Task task = Task.Run(async () => await ShiBie()); // 使用Task.Run包装异步方法
// isCanShiBie = true; // int result = task.Result; // 等待异步操作完成并获取结果
// // Console.WriteLine(result); // 处理结果
//});
//thread.IsBackground = true;
//thread.Start();
}
static void EnqueueTask(Action task)
{
lock (queue)
{
queue.Enqueue(task);
}
}
bool isProcessQueue = true;
void ProcessQueue()
{
while (isProcessQueue)
{
Action task = null;
loc