我正在尝试从另一个线程上运行的另一个类更新 Winform 图片框。我从另一个线程 _and_ 类中遵循 Update WinForm Controls 的答案,该类似乎具有所有信息,除了如何准确地将 Winform/Winform 成员函数的引用传递给构造函数中的线程/如何调用 Winform 成员函数从线程。
我的代码如下:
//Camera.h
public class CameraThread
{
public:
CameraThread(????)
{
// constructor
}
void DoSomething
{
// call UpdateBox on Form1
????
}
};
//Form1.h
namespace SV7 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
private: CameraThread* CT;
private: boost::thread* ImageACQ;
public: delegate void UpdateDelegate(void);
public:
Form1(void)
{
CT = new CameraThread(????);
boost::thread* ImageACQ = new boost::thread(&CameraThread::ImageAcquisition,CT);
InitializeComponent();
InitializeCanny();
}
void UpdateBox(void)
{
if (this->RawImageBox->InvokeRequired)
{
UpdateDelegate^ d = gcnew UpdateDelegate(this,&Form1::UpdateBox);
this->RawImageBox->BeginInvoke(d);
}
else
{
}
}
};
}
我把??????,我不知道使用什么语法来传递/调用成员函数。我假设我的 Camera.h 中需要 Form1 的前向声明,但在引用 Form.h 中的实际表单类时遇到了麻烦。但是,如果使用直接函数指针,那么我认为这不是可行的方法。
作为背景,我使用的是 VS2010 SE C++。我试图有一个单独的线程从网络摄像头中获取图像,使用 OpenCV 处理它们,然后在 GUI 线程上的图片框中显示结果。
我只是不知道如何做到这一点,并希望得到任何指导。提前致谢/