Как создать поток внутри класса, используя System::Threading Visual C++

Мне нужно создать тему внутри моего класса LandingPage чтобы запустить параллельную задачу, которую я могу приостановить / воспроизвести, используя событие кнопки. Платформа - Windows, и я работаю над WinForms.

Мой код:

public ref class LandingPage : public System::Windows::Forms::Form {
    public:
        LandingPage(void)
        {
            InitializeComponent();
            this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(LandingPage, &LandingPage::CaptureImagesToLoad));
        }
    private: static System::Threading::Thread^ thr;
    private: System::Void CaptureImagesToLoad() {
        while (true) {
            Fove::SFVR_BitmapImage image = this->dataCapture->GetEyeImageData();
            this->dataCapture(&image, "C:\\Users\\Kapil\\Documents\\Dataset\\buffer.bmp");
            this->eyePictureBox->ImageLocation(bufferingLocation);
        }
    }
};

Я получаю следующие ошибки:

Severity    Code    Description Project File    Line    Suppression State
Error   C2440   'initializing': cannot convert from 'FOVEImageCapture::LandingPage' to 'FOVEImageCapture::LandingPage ^'    FOVEImageCapture    c:\users\kapil\desktop\project1\project1\myform.h   43  
Error   C3754   delegate constructor: member function 'FOVEImageCapture::LandingPage::CaptureImagesToLoad' cannot be called on an instance of type 'FOVEImageCapture::LandingPage'  FOVEImageCapture    c:\users\kapil\desktop\project1\project1\myform.h   43  
Error   C2512   'System::Threading::Thread::Thread': no appropriate default constructor available   FOVEImageCapture    c:\users\kapil\desktop\project1\project1\myform.h   43  

Пример, который я нашел в Интернете, использует отдельный класс для определения функции, которая будет использоваться в потоке. Я не могу сделать это так, как мне нужно LandingPage"s private переменные. Как мне отредактировать мой код, чтобы он работал в качестве потока в классе?

1 ответ

Решение

Изменение этой строки:

this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(LandingPage, &LandingPage::CaptureImagesToLoad));

в

this->thr = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(this, &LandingPage::CaptureImagesToLoad));

работал на меня.

Другие вопросы по тегам