在单击按钮事件c ++中创建一个新线程

时间:2014-10-31 12:15:41

标签: multithreading c++-cli

我使用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并停止。

1 个答案:

答案 0 :(得分:3)

您必须使用 BackgroundWorker 组件。请参阅此处的文档链接:BackgroundWorker class

在按钮事件中,调用RunWorkerAsync方法。调用RunWorkerAsync时,事件DoWork将被提升

void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
}

将代码放入。