c#事件问题
本文关键字:问题 事件 | 更新日期: 2023-09-27 18:10:18
我的应用程序有一些问题。这是我有一个网络摄像头,它将图片输入功能,计算是否有任何运动和在哪里。但问题是(我的观点),由相机的新帧触发的事件是如此频繁,以至于代码没有时间完成。那么,如果这是我的代码,我可以在哪里放置一些信号量或其他东西:(我尝试了很多事情都没有成功):
private void button1_Click(object sender, EventArgs e)
{
FinalVideoSource = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideoSource.NewFrame += new NewFrameEventHandler(FinalVideoSource_NewFrame);
FinalVideoSource.Start();
ImageEfects.drawGrid(detectionImage, 40);
}
public void FinalVideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
image = (Bitmap)eventArgs.Frame.Clone();
#region demoInit
if (initalization)
{
image1 = image;
initalization = false;
}
#endregion demoInit
ImageProcessing.calculateDiferences(ref image, ref image1, ref detectionImage);
screen1.Image = image;
screen2.Image = detectionImage;
}
只是不要比较每一帧。我会存储一个帧,然后等待(计数)指定的帧数,然后比较当前帧和存储的帧(在单独的线程中)。并存储当前帧以供下次比较。
等待的帧数由您决定,这取决于您可以接受忽略某个动作的时间圈。
我会在FinalVideoSource_NewFrame
的开头使用一个标志集,如果设置将让函数返回。在你的FinalVideoSource_NewFrame
的开头和结尾切换这个标志。这样,即使计算周期变长,也不会在队列中发生。