【发布时间】:2019-02-28 20:53:19
【问题描述】:
这是我的代码的基本思想:
private void CaptureCameraFrame()
{
Capture = new VideoCapture();
CameraModel.Instance.CameraViewMat = Capture.QueryFrame();
// do stuff with queried matrix here
if(noAbortCondition)
{
CaptureCameraFrame();
}
}
该方法应该在一个单独的线程中运行,在处理后使用当前图像更新我的 GUI。 唯一的问题是,我得到了两种不同的错误:
- 尝试读/写受保护的内存:这发生在第二次运行时 方法。
- 我在查询帧后立即使用`CameraModel.Instance.CameraViewMat 得到一个空引用错误。
这两个问题似乎是相关的,似乎QueryFrame() 与其余代码异步运行,并且在程序跳转到下一步时未完成。
问题是:如何确保从相机中查询图像已完成,并且我可以使用矩阵中的信息以及开始新的查询?
在我发现的所有示例中,这是通过使用时间来完成的,但我想在完成最后一帧的处理后立即开始一个新帧。
当谈到线程时,我在 C# 中并没有真正做太多事情,但据我所知,在这种情况下,人们会使用 async 和 awaitkeywords 来确保异步方法中的方法完成。但是,在这种情况下,我无法进行有效的实施。
【问题讨论】:
-
关于要添加的内容:如果我删除递归,我会设法捕获静态图像。所以从这方面来说,一切都应该正常。