0
我推送帧到队列,然后使用另一个线程来处理它,但始终运行在“推帧线程”。如何处理队列?
VideoSource.NewFrame += VideoSource_NewFrame;
private void VideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
var bitmap = (Bitmap)eventArgs.Frame;
if (_fileWriter.IsOpen&&IsRecording)
{
_bitmaps.Enqueue(bitmap);
//Thread.Sleep(10);
}
}
但如果我处理Thread.Sleep(10),另一个线程将工作。
另一个线程代码:
new Task(() =>
{
Bitmap bitmap = null;
while (IsRecording==true)
{
if (_bitmaps.Count == 0)
continue;
_bitmaps.TryDequeue(out bitmap);
if(bitmap!=null&& _fileWriter.IsOpen)
_fileWriter.WriteVideoFrame(bitmap);
if (_bitmaps.Count == 0 && IsRecording == false&&_fileWriter.IsOpen)
{
_fileWriter.Flush();
_fileWriter.Close();
}
}
}).Start();
如何用更优雅的方式处理呢?
你是什么意思的“始终运行在推框架线程”? –
@Kevin Gosse:任务中的“while循环代码”将不会再执行三次,但计数不为零。 – HaibaraAi
你为什么用构造函数创建'Task'?这是一个不好的做法。 – VMAtm