C#事件问题

时间:2011-10-04 10:09:52

标签: c# events

我的申请有些问题。继承人我有网络摄像头将图片输入功能,计算是否有任何动作和位置。但问题是(我的观点),来自相机的新帧所引发的事件往往是代码没有时间完成。所以,如果这是我的代码,我可以在哪里放置一些信号量或其他东西:(我尝试了许多事情,没有任何事情):

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

2 个答案:

答案 0 :(得分:0)

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

等待的帧数取决于你,这取决于你可以忽略一个运动的时间段。

答案 1 :(得分:0)

我会在FinalVideoSource_NewFrame的开头设置一个标志,如果设置将让函数返回。在FinalVideoSource_NewFrame的开头和结尾切换此标记。这样,如果计算周期花费的时间更长,你就永远不会进入队列。