我将帧推送到队列,然后使用另一个线程来处理它,但总是在" push frame thread"中运行。
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();
如何使用更优雅的方法处理它?</ p>
答案 0 :(得分:0)
我只是将代码更改为此。 它工作......
var bitmap = (Bitmap)eventArgs.Frame.Clone();