.net 取消BackgroundWorker-Windows窗体(C+;+;/CLI)

.net 取消BackgroundWorker-Windows窗体(C+;+;/CLI),.net,winforms,c++-cli,backgroundworker,.net,Winforms,C++ Cli,Backgroundworker,我正在触发按钮单击事件上的CancelAsync()方法,以停止Windows窗体代码中的后台工作程序。下面是示例代码 // Windows Form private: System::Void startButton_Click(System::Object^ sender, System::EventArgs^ e) { testBgWorker->RunWorkerAsync(); } private: System::Void testBgW

我正在触发按钮单击事件上的
CancelAsync()
方法,以停止Windows窗体代码中的后台工作程序。下面是示例代码

// Windows Form

private: System::Void startButton_Click(System::Object^  sender, System::EventArgs^  e) {
        testBgWorker->RunWorkerAsync();
        }

private: System::Void testBgWorker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {

            CalculateDistance* calcDistance = new CalculateDistance();
        calcDistance->doCalculations();
         }

private: System::Void stopButton_Click(System::Object^  sender, System::EventArgs^  e) {

            testBgWorker->CancelAsync();
         }

// CalculateDistance.cpp   

void CalculateDistance::doCalculations() {
    for (int i=0; i<1000, i++) 
    {
        // some calculations here
    }
}
//Windows窗体
private:System::Void startButton_单击(系统::对象^sender,系统::事件参数^e){
testBgWorker->RunWorkerAsync();
}
私有:系统::Void testBgWorker\u DoWork(系统::对象^sender,系统::组件模型::DoWorkEventArgs ^e){
CalculateDistance*calcDistance=新的CalculateDistance();
计算距离->文件计算();
}
私有:系统::无效停止按钮\单击(系统::对象^sender,系统::事件参数^e){
testBgWorker->CancelAsync();
}
//CalculateInstance.cpp
void calculateInstance::doccalculations(){

对于(int i=0;i您需要在CalulatedDistance循环中检查cancel。在C#中,它看起来是这样的。msdn.microsoft.com上有一些很好的示例。您需要将backgoundworker标记为support Canceling

 if (worker.CancellationPending)
        {
            e.Cancel = true;
            return "cancelled";
        }

使用标记指定编程语言,而不是标题。它可以启用语法突出显示并帮助正确的人找到问题。您不必检查工作代码中的CancellationPending属性。因此,它不会取消。@HansPassant谢谢,我不知怎的没有注意到
CancellationPending
属性。谢谢,这就是有帮助:)