我正在使用c#与网络摄像头集成。我需要每隔x毫秒生成一个快照映像并将其保存到文件中。 我已经有代码启动并运行以在按钮单击事件中保存到文件,但是我想知道在后台拍摄快照时我应该做什么 - 这应该是多线程的吗?老实说,我不确定。 我可以阻止UI线程,放入Thread.Sleep然后只拍摄快照,但我不知道这是否正确。 我想过使用后台工作程序,但我现在遇到了SendMessage的交叉线程问题...所以我想知道我是否应该去打扰多线程或者只是阻止UI。
答案 0 :(得分:1)
对于相机更新其像素缓冲区的速度,存在物理硬件限制。网络摄像头不会超过30fps。获取实际图像应该或多或少是瞬时的(除非在非常高的分辨率下),因此您不需要开始使用线程。当我不久前做的时候,我使用了
中给出的方法答案 1 :(得分:0)
我认为你应该把这个任务放在一个单独的线程上。在某些情况下,创建和保存图像的过程可能需要更长的时间,此时HMI可能会冻结。为避免这种情况,请将此任务放在单独的线程上。
答案 2 :(得分:0)
您可以创建一个计时器,每隔n毫秒启动一个委托,该委托可以将工作线程排队,以执行您的OnClick()处理程序已经完成的操作。
我不会将其写为单线程应用程序,因为根据用户网络摄像头的性能,您可能很容易陷入永久循环处理计时器事件,导致主UI线程被永久阻止。
ThreadQueue.QueueUserWorkitem((args) =>
{
// Blah ...
}
不需要太多努力才能正常工作。