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ループコード」は3回以上実行されませんが、カウントはゼロではありません。 – HaibaraAi
コンストラクタで 'Task'を作成しているのはなぜですか?それは悪い習慣です。 – VMAtm