在this question我被告知我可能会遇到Timer_Tick
更改期间发生bitmap
事件的问题,这会阻止我的图表更新。这确实正在发生,因为我的图表似乎以不稳定的方式更新。
有人建议我添加某种"同步"在Timer
和bitmap
刷新之间。我在网上阅读了一些关于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(通过将代码直接放在事件代码中),但无济于事,因为我可能受到所需计算时间的限制。