将计时器与位图刷新

时间:2018-05-09 08:38:27

标签: c# timer camera synchronization

this question我被告知我可能会遇到Timer_Tick更改期间发生bitmap事件的问题,这会阻止我的图表更新。这确实正在发生,因为我的图表似乎以不稳定的方式更新。

有人建议我添加某种"同步"在Timerbitmap刷新之间。我在网上阅读了一些关于C#同步的内容,因为我从来没有使用过这样的东西,但没有任何真正与我关注的内容。

关于如何在我的代码中实现这种行为,我没有丝毫的线索。有人能帮助我吗?与此问题相关的代码在linked question中有特色,如果您想查看它。

由于

编辑:这是一个更详细的代码版本,从相机开始采集:

private void BtAcquisitionLiveCam_Click(object sender, EventArgs e)
    {
        // Getting the list of plugged cameras
        CameraCollection cameras = vimba.Cameras;

        //Starting the chosen camera
        string id = cameras[0].Id;
        mycamera = vimba.OpenCameraByID(id, VmbAccessModeType.VmbAccessModeFull);

        // Preparing image acquisition and starting it
        Frame[] frameArray = new Frame[3];
        Feature featurePayloadSize = null;
        long payloadSize;
        featurePayloadSize = features["PayloadSize"];
        payloadSize = featurePayloadSize.IntValue;

        for (int index = 0; index < frameArray.Length; ++index)
        {
            frameArray[index] = new Frame(payloadSize);
            mycamera.AnnounceFrame(frameArray[index]);
        }

        for (int index = 0; index < frameArray.Length; ++index)
        {
            mycamera.QueueFrame(frameArray[index]);
        }

        this.m_Acquiring = true;
        mycamera.OnFrameReceived += new Camera.OnFrameReceivedHandler(this.OnFrameReceived);
        mycamera.StartContinuousImageAcquisition(1);
    }

    //Setting timer for histogram update
    Timer histTimer = new Timer();
    histTimer.Interval = 500; // specify interval time as you want
    histTimer.Tick += new EventHandler(histTimer_Tick);
    histTimer.Start();
}

OnFrameReceived事件是相机触发的唯一事件。我之前曾试图在每次迭代时对其进行upadte(通过将代码直接放在事件代码中),但无济于事,因为我可能受到所需计算时间的限制。

0 个答案:

没有答案