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

c#事件问题

只是不要比较每一帧。我会存储一个帧,然后等待(计数)指定的帧数,然后比较当前帧和存储的帧(在单独的线程中)。并存储当前帧以供下次比较。

等待的帧数由您决定,这取决于您可以接受忽略某个动作的时间圈。

我会在FinalVideoSource_NewFrame的开头使用一个标志集,如果设置将让函数返回。在你的FinalVideoSource_NewFrame的开头和结尾切换这个标志。这样,即使计算周期变长,也不会在队列中发生。