一次只有一个线程c#

时间:2014-09-03 12:21:48

标签: c# multithreading

我有一个包含大量输入数据(视频)的任务。我需要在后台处理它的帧而不冻结UI,我不需要处理每一帧。

所以我想在后台忙的时候创建一个后台线程并跳过帧。比我从视频输入再次获得另一帧。

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

public class VideoProcessor{

 bool busy=false;

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

}

1 个答案:

答案 0 :(得分:1)

  

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

如果VideoStreamingEvent方法永远不会在多个线程上同时执行,那么只要将volatile添加到busy字段声明中,这样就可以正常工作。在实践中,它可能出现,没有它就可以正常工作,但这种行为无法保证。

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