像这篇文章一样,我需要取消派生自 .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 类中的布尔值。到目前为止,这还没有奏效。
我的大纲课程相当简单。
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() 函数添加另一个处理程序,该处理程序可以以某种方式在大纲类中设置取消变量?
谢谢。