0

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
    }
}

forBackgroundWorker(ループからの終了)をキャンセルするにはどうすればよいですか?CancelAsync()仕事をしていないようです。

ありがとう。

4

1 に答える 1

2

CalulateDistanceループでキャンセルを確認する必要があります。C#では次のようになります。msdn.microsoft.comのいくつかの良い例。また、バックグラウンドワーカーをサポートキャンセルとしてマークする必要があります。

 if (worker.CancellationPending)
        {
            e.Cancel = true;
            return "cancelled";
        }
于 2012-05-23T18:43:21.930 に答える