C#事件问题

C#事件问题,c#,events,C#,Events,我的申请有一些问题。这是我的网络摄像头,它将图片输入到函数中,计算是否有任何移动以及移动的位置。但问题是(我的观点)由摄像机新帧触发的事件太频繁,以至于代码没有时间完成。因此,如果这是我的代码,我可以在哪里放置一些信号灯或其他东西:(我尝试了很多事情,但没有成功): 只是不要比较每一帧。我将存储一个帧,然后等待(计数)指定数量的帧,然后比较当前帧和存储的帧(在单独的线程中)。并存储当前帧以供下次比较 等待的帧数由您决定,这取决于您可以忽略某个移动的时间圈。我将使用在FinalVideoSourc

我的申请有一些问题。这是我的网络摄像头,它将图片输入到函数中,计算是否有任何移动以及移动的位置。但问题是(我的观点)由摄像机新帧触发的事件太频繁,以至于代码没有时间完成。因此,如果这是我的代码,我可以在哪里放置一些信号灯或其他东西:(我尝试了很多事情,但没有成功):


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


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

我将使用在
FinalVideoSource\u NewFrame
开头设置的标志,如果设置该标志,函数将返回。在
FinalVideoSource\u NewFrame
的开头和结尾切换此标志。这样,如果计算周期更长,您将永远不会在队列中出现问题。

是否可以重新表述标题?这很普通。实际的问题是什么?能否提供引发事件的代码?如果不是,您知道每个事件是否都是从同一线程引发的吗?是的,但是如果在每个新的相机帧上都触发了事件,我如何才能防止这种情况发生。这是我的问题,因为如果当前代码停止执行,它将跳转到事件处理程序,对吗?事件将被触发,但如果你除了增加计数器什么都不做,那没什么大不了的。我想说的是:只在每第n次触发事件时执行代码。但是你应该在一个单独的线程中这样做,否则你可能仍然会建立一个事件队列。除此之外,我想知道传统的事件处理在这里是否合适。也许你应该看看。
 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;
    }