我对从我的网络摄像头录制视频的多线程方法有疑问。我正在使用AForge框架。
代码运行良好,如果在单个线程上,视频也会被保存。但是,在录制过程中,流会冻结。我认为使用不同的线程进行录音应该可以解决问题。
我有这个功能,它正在录制大约 4 秒的剪辑:
void startrecord()
{
writer.Codec = "wmv3";
writer.FrameRate = 30;
writer.Open("C://temp//test.avi", pictureBox1.Image.Width, pictureBox1.Image.Height);
// create frame image
Bitmap image = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height);
for (int i = 0; i < 240; i++)
{
image = (Bitmap)pictureBox1.Image;
//Add Date Time Stamp
RectangleF rectf = new RectangleF(10, 10, 140, 17);
Graphics g = Graphics.FromImage(image); //00
g.FillRectangle(Brushes.Black, rectf);
g.DrawString(DateTime.Now.ToString("dd:MM:yyyy HH:mm:ss"), new Font("Tahoma", 10), Brushes.Red, rectf);
g.Flush();
writer.AddFrame(image);
}
writer.Close();
}
上面的函数是由按钮点击事件调用的:
private void button2_Click(object sender, EventArgs e)
{
//1: Thread t2 = new Thread(startrecord);
//2: t2.Start();
startrecord(); //3
}
现在,当我尝试运行第 1 行和第 2 行时,出现错误
对象当前正在其他地方使用。
JIT 指向标记为 //00 的行。
PS 我对 C# 编码非常陌生,并尝试过 'lock' ,但我无法正确实现。
任何帮助将不胜感激。谢谢!