像这样post我需要在从.NET BackgroundWorker派生的C ++ / CLI类中取消BackgroundWorker。
我正在使用C ++ / CLI来包装一个运行时间很长的原生C ++函数。
我怎样才能/应该从本机C ++中长时间运行的循环访问BackgoundWorker类的CancellationPending成员?
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映射到Outline类中的bool。到目前为止,这还没有奏效。
我的大纲课程非常简单。
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;
}
}
};
另外还有另一种方法可以在BackgroundWorker类的CancelAsnc()函数中添加另一个处理程序,它可以以某种方式在大纲类中设置一个取消变量吗?
感谢。
答案 0 :(得分:0)
您可以在OnDoWork
覆盖的末尾添加内容,以便不断检查BackgroundWorker::CancellationPending
标记。如果为true,则将pOutline->CancellationPending
设置为true。