如何在dll中使用C#锁定我的对象

时间:2016-08-29 05:31:25

标签: c# bitmap

我有一个i / p相机和一个重复和接收每一帧的功能。

android:textAllCaps="true"

这是我缓冲最后100位图的缓冲区:

public Bitmap ProcessFrame(Bitmap frame)
{

} 

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

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
      }
   }
}

我搜索过,发现锁会帮助我。保存缓冲的位图时,锁会锁定编写器,因此另一个位图将停止在编写器上并等待解锁,但它没有帮助。

我该怎么办?我该怎么做一个安全的线程?我正在使用opensource ispy,我认为它将为每个帧创建线程并调用此线程。帮我保存传入的帧。

1 个答案:

答案 0 :(得分:2)

为什么不使用ConcurrentQueue而不是使用愚蠢的固定数组类型解决方案?那么你将不必处理线程,因为那是一个线程安全的类。让一个线程从队列的头部拉出帧并编写它们并添加另一个线程。