gpt4 book ai didi

c++ - 如何将对 Winform 成员函数的引用传递给不同线程的不同类?

转载 作者:行者123 更新时间:2023-11-28 07:44:14 24 4
gpt4 key购买 nike

我正在尝试从另一个线程上运行的另一个类更新 Winform 图片框。我按照 Update WinForm Controls from another thread _and_ class 的答案进行操作它似乎包含所有信息,除了如何准确地将对 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 线程的图片框中显示结果。

我只是不知道该怎么做,希望得到任何指导。提前致谢/

最佳答案

您需要类中的 Form1 实例,因此您的构造函数调用应如下所示:

CT = new CameraThread(this);

我不太喜欢 C++/CLI,所以它的语法可能不完美,但意思应该很清楚。您的类必须采用 Form1 的实例并保存它,直到需要调用 UpdateBox 为止:

public class CameraThread
{
private:
Form1^ form;
public:
CameraThread(Form1^ form)
{
// constructor
this->form = form;
}

void DoSomething
{
// call UpdateBox on Form1
form->UpdateBox();
}
};

请注意,您正在混合使用两个强大的库,.NET Framework 和 boost。如果您不需要它们两者,您应该坚持使用其中的一个。 .NET Framework 也有线程。

关于c++ - 如何将对 Winform 成员函数的引用传递给不同线程的不同类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com