.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
属性。谢谢,这就是有帮助:)