一次只有一个线程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;
});
}
}
}
但是,它会引起麻烦吗?可能有更好的方法吗?
如果VideoStreamingEvent
方法从不在多个线程上同时执行,那么如果您简单地将volatile
添加到busy
字段声明中,这将正常工作。在实践中,如果没有它,可能会显得足够好,但这种行为并不能得到保证。
如果VideoStreamingEvent
可以在多个线程上调用,那么您将需要在读写busy
字段的位置进行一些同步。