一次只有一个线程c#

本文关键字:有一个 线程 一次 | 更新日期: 2023-09-27 18:20:33

我有一项任务需要大量的输入数据(视频)。我需要在不冻结UI的情况下在后台处理它的帧,并且我不需要处理每一帧。

所以我想创建一个后台线程,并在后台繁忙时跳过帧。然后我从视频输入中获得另一帧。

我现在有了这个简单的代码。我工作过。但是,它会引起麻烦吗?可能有更好的方法吗?

public class VideoProcessor{
 bool busy=false;
 void VideoStreamingEvent(Frame data){
  if(!busy){
   busy=true;
   InvokeInBackground(()=>{
    DataProcessing(data);
    busy=false;
   });
  }
 }
}

一次只有一个线程c#

但是,它会引起麻烦吗?可能有更好的方法吗?

如果VideoStreamingEvent方法从不在多个线程上同时执行,那么如果您简单地将volatile添加到busy字段声明中,这将正常工作。在实践中,如果没有它,可能会显得足够好,但这种行为并不能得到保证。

如果VideoStreamingEvent可以在多个线程上调用,那么您将需要在读写busy字段的位置进行一些同步。