C++ 如何在c++;winform?

C++ 如何在c++;winform?,c++,multithreading,winforms,C++,Multithreading,Winforms,在这个程序中,我想用一个线程捕获我的网络摄像头的帧,然后将帧发送到另一个名为MainThread的帧,并在一个picturebox中显示网络摄像头 所以我想把捕获的帧(_frame1)从捕获帧线程传递到主线程。 有什么办法吗 这是密码 VideoCapture cap1(0); Mat _frame1; void capture_frame_1() { for (;;) { cap1 >> _frame1; if (

在这个程序中,我想用一个线程捕获我的网络摄像头的帧,然后将帧发送到另一个名为MainThread的帧,并在一个picturebox中显示网络摄像头

所以我想把捕获的帧(_frame1)从捕获帧线程传递到主线程。 有什么办法吗

这是密码

    VideoCapture cap1(0);
    Mat _frame1;

    void capture_frame_1() {
    for (;;) {
        cap1 >> _frame1;

        if (waitKey(1) == 27) {
            break;
        }
    }
}

void invoke_capture_frame_1() {
    Invoke(gcnew System::Action(this, &MyForm::capture_frame_1));
}

void start_picture_Boxes() {
    for (;;) {

        mat2picture bimapconvert;
        this->pictureBox1->Image = bimapconvert.Mat2Bimap(_frame1);

        pictureBox1->Refresh();

        if (waitKey(1) == 27) {
            break;
        }
    }
}

void picture_Boxes() {
    Invoke(gcnew System::Action(this, &MyForm::start_picture_Boxes));
}



private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
ThreadStart^ ThreadMethod1 = gcnew ThreadStart(this, &MyForm::invoke_capture_frame_1);
Thread^ capture_frame_1_Thread = gcnew Thread(ThreadMethod1);

ThreadStart^ ThreadMethod3 = gcnew ThreadStart(this, &MyForm::picture_Boxes);
Thread^ MainThread = gcnew Thread(ThreadMethod3);

capture_frame_1_Thread->Start();
MainThread->Start();


}
};
}

您可以创建一个名为webcam的类,并使用这些方法。然后您可以有一些方法来启动threads webcam.startThreads();。 然后可以创建名为frame的私有变量,这样就可以在线程之间共享,但不要忘记使用lock来消除竞争条件。 关于锁的信息


我希望它能有所帮助,我在制作网络过滤器时使用了这种结构。

考虑在答案中添加示例代码