В этот вопрос Мне сказали, что у меня, вероятно, возникнут проблемы, связанные с событием Timer_Tick
, происходящим во время изменения bitmap
, что помешает обновлению моего графика. Это действительно происходит, поскольку моя диаграмма, кажется, обновляется хаотично.
Кто-то предложил мне добавить некую «синхронизацию» между Timer
и bitmap
обновлением. Я прочитал несколько вещей онлайн о синхронизации в C #, поскольку я никогда не использовал такую вещь, но ничего, что действительно касалось моей проблемы.
Я не имею ни малейшего понятия о том, как я могу реализовать такое поведение в своем коде. Может ли кто-нибудь помочь мне здесь? Код, связанный с этим вопросом, указан в связанном вопросе , если вы хотите посмотреть на него.
Спасибо
РЕДАКТИРОВАТЬ: Вот более детальная версия кода, который начинает сбор данных с камеры:
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 является единственным событием, которое запускается камерой. Ранее я пытался обновлять свою гистограмму на каждой итерации (размещая код непосредственно в коде события), но безрезультатно, поскольку я, вероятно, был ограничен требуемым временем вычислений.