Синхронизация таймера с обновлением растрового изображения - PullRequest
0 голосов
/ 09 мая 2018

В этот вопрос Мне сказали, что у меня, вероятно, возникнут проблемы, связанные с событием 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 является единственным событием, которое запускается камерой. Ранее я пытался обновлять свою гистограмму на каждой итерации (размещая код непосредственно в коде события), но безрезультатно, поскольку я, вероятно, был ограничен требуемым временем вычислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...