繁体   English   中英

如何在DLL中使用C#锁定对象

[英]How can I lock my object using C# in dll

我有一个I / P相机,并且具有重复和接收每一帧的功能。

public Bitmap ProcessFrame(Bitmap frame)
{

} 

这是我正在缓冲最近100个位图的缓冲位置:

lock (writer)
{
   BM[now] = new Bitmap(frame);
   now = (now == 99) ? 0 : now + 1;
}

当我按记录来录制视频时,我需要保存每个缓冲的位图,此后,我必须保存按记录后收到的传入位图。 因此,当我按“录制”并使用下面的代码将缓冲的位图保存到视频文件时,我丢失了一些传入的帧。 处理此部分时,传入的帧将被删除,我不想删除它们。

lock (writer)
{
   for (int i = now; i < 150; i++)
   {
      if (BM[i] == null)
        break;
      writer.WriteVideoFrame(BM[i]);//adding frame to an existing open file
   }
   if (now != 0)
   {
      for (int i = 0; i < now - 1; i++)
      {
         writer.WriteVideoFrame(BM[i]);//adding frame to an existing open file
      }
   }
}

这是传入帧要保存在视频文件中的部分

 lock (writer)
 {
    writer.WriteVideoFrame(frame);//adding frame to an existing open file
 }

我进行了搜索,发现锁将对我有所帮助。 当保存缓冲的位图时,锁将锁定编写器,因此出现的另一个位图将在编写器处停止并等待被解锁,但这无济于事。

我该怎么办? 如何制作安全线? 我正在使用开源ispy,我认为它将为每个框架创建线程并调用此线程。 帮助我保存传入的帧。

与其使用笨拙的固定数组类型解决方案,不为何使用ConcurrentQueue? 然后,您不必处理线程,因为这是线程安全的类。 有一个线程从队列的开头拉出帧并编写它们,然后添加另一个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM