我使用Windows窗体应用程序创建了一个gui。我正在使用一个按钮,它对点击事件执行一些功能。我注意到当按钮的功能发生时,gui形式会冻结。我遇到了一些用于多线程的库。但是我试图理解我应该在新线程中添加什么。我应该使用哪个库?我的onClick事件是:
private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) {
backgroundWorker1->RunWorkerAsync( 10 );
}
private: System::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {
this->progressBar1 ->Value = 0;
string path = "vid/frames/";
this->timer1->Start();
Detection detect;
vector<string> files = detect.listFile(path);
for(int index=0; index<files.size(); index++){
cout << files.at(index) <<endl;
detect.draw(path, files.at(index), modulator, trackbar_values);
this->progressBar1->Increment(1);
}
}
它运行一次doWork并停止。
答案 0 :(得分:3)
您必须使用 BackgroundWorker 组件。请参阅此处的文档链接:BackgroundWorker class。
在按钮事件中,调用RunWorkerAsync方法。调用RunWorkerAsync时,事件DoWork
将被提升
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
}
将代码放入。