.net — Отмена BackgroundWorker в оболочке C ++ / CLI собственного цикла C ++

Как это сообщение Мне нужно отменить BackgroundWorker в классе C ++ / CLI, производном от .NET BackgroundWorker.

Я использую C ++ / CLI, чтобы обернуть давно работающую унаследованную функцию C ++.

Как я могу / должен получить доступ к члену CancellationPending класса BackgoundWorker из долгого цикла в нативном C ++?

public ref class BackgroundWorkerWrapper : BackgroundWorker
{
private:
Outline* pOutline;

public:
BackgroundWorkerWrapper(void)
{
WorkerReportsProgress = true;

pOutline = new Outline;

//      pOutline->CancellationPending = &(BackgroundWorker::CancellationPending);

}

protected:

virtual void OnDoWork(DoWorkEventArgs ^e) override {
pOutline->DoWork();
BackgroundWorker::OnDoWork(e);
}

};

Выше вы можете видеть, что я пытался отобразить CancellationPending в bool в классе Outline. Пока что это не сработало.

Мой класс Outline довольно прост.

public class Outline
{

public:
bool* CancellationPending;

Outline()
{
}
~Outline()
{
}

void DoWork()
{
try
{
for (int i=0; i < 1000; i++)
{
if (CancellationPending[0] == true)
{
break;
}

// Do some trivial work
Sleep(50);
}
}
// catch(...)
catch (exception& e)
{
cout << e.what() << endl;
}

}
};

Альтернативно, есть ли другой способ добавить другой обработчик в функцию CancelAsnc () класса BackgroundWorker, которая могла бы каким-то образом установить переменную отмены в классе структуры?

Благодарю.

0

Решение

Вы могли бы добавить что-то в конце вашего OnDoWork переопределить, чтобы постоянно проверять BackgroundWorker::CancellationPending флаг. Если true, установите pOutline->CancellationPending к истине тоже.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]