C# C Picturebox更新问题

C# C Picturebox更新问题,c#,multithreading,camera,C#,Multithreading,Camera,我正在编写一个GUI,它显示一个视频,该视频是从一个摄像头连续获取的。我还为负责获取帧的相机开发了一个“dll”。每次采集帧时,它都会生成一个事件 当主窗体加载时,它将注册到该事件: testCameraHandle = new CCameraHandle(); testCameraHandle.NewFrameAdded += testCameraHandle_NewFrameAdded; 这样,每次采集帧时,GUI都可以更新其picturebox: delegate void NewFr

我正在编写一个GUI,它显示一个视频,该视频是从一个摄像头连续获取的。我还为负责获取帧的相机开发了一个“dll”。每次采集帧时,它都会生成一个事件

当主窗体加载时,它将注册到该事件:

testCameraHandle = new CCameraHandle();
testCameraHandle.NewFrameAdded += testCameraHandle_NewFrameAdded; 
这样,每次采集帧时,GUI都可以更新其picturebox:

delegate void NewFrameAddedDelegate(object sender, EventArgs e);

private void testCameraHandle_NewFrameAdded(object sender, EventArgs e)
{
    //"pbImage" is the name of the picturebox
    if (pbImage.InvokeRequired)
    {
        NewFrameAddedDelegate del = new NewFrameAddedDelegate(testCameraHandle_NewFrameAdded);
        pbImage.Invoke(del, sender, e);
    }
    else
    {
        var oldImage = pbImage.Image;
        pbImage.Image = testCameraHandle.bitmap;
        if (oldImage != null)
            ((IDisposable)oldImage).Dispose();
    }
}
在这个GUI的主窗体中,我还有一个Windows.Forms.Timer,它每5次运行一次,并需要100毫秒来完成它的周期。这个计时器对我来说是必需的,我不能把它移到别处。这种结构并不令人满意,因为即使相机以每秒20帧的速度运行,“picturebox”的更新速度也很慢,而且由于计时器的原因而不稳定。我不知道如何让所有这些都能正常工作,以及如何使“刷新率”与相机fps同步。这个问题有解决办法吗?或者,由于计时器正在运行,因此不可能具有良好的“刷新率”?多谢各位

编辑:

我正在尝试使用System.Threading.Timer,但每次相机开始抓拍时,计时器就会停止循环。我正在初始化计时器,如下所示:

System.Threading.TimerCallback timerCallback = this.timerPLC_Tick;
System.Threading.Timer thTimer = new  System.Threading.Timer(timerPLC_Tick, null, 1000, 5000);

刷新是通过调用Invalidate来完成的。您可以保存图像,但不将其分配给PictureBox并调用控件的invalidate。在这个GUI的主要形式中,我还有一个计时器,它每5个刻度运行一次,需要100毫秒来完成它的周期。它是什么类型的计时器?Windows.Forms.Timer?这个计时器是做什么的?UI交互还是一些长期运行的逻辑?您好,谢谢您的回答。我不确定是否理解了你的建议。我的问题是,即使相机以20fps的速度工作,GUI中的picturebox也无法捕捉到所有帧,因为“计时器”使它变慢了。每5个计时器一次,你在做什么?可能还有另一种方法可以实现您的最终目标…您必须在启动计时器的地方发布代码,我感觉您使用的是一个局部方法变量,它超出了范围并被垃圾收集。