作为初学者,我在这里挣扎着语法。 我正在制作一个通用的BackgroundWorker,以避免为我的应用程序中的每个任务创建单独的worker。 我无法弄清楚如何将成员函数传递给RunWorkerAsync()
这是我的DoWork方法的代码:
private: System::Void backgroundWorker2_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {
Func<int> ^func = (Func<int>^)e->Argument;
e->Result = func();
}
让我们说我希望BG工作人员运行一个名为myfunc的函数。 我想做这样的事情:RunWorkerAsync(myfunc)
虽然myfunc是同一类的成员,即Form1
答案 0 :(得分:0)
我不清楚挂断可能是什么,创建Func&lt;&gt;的语法。与您订阅DoWork事件的方式没有什么不同。所以只是一些示例代码:
ref class Example {
BackgroundWorker^ worker;
void OnDoWork(System::Object ^sender, System::ComponentModel::DoWorkEventArgs ^e) {
auto job = safe_cast<Func<int>^>(e->Argument);
e->Result = job();
}
int myfunc() {
return 42;
}
public:
Example() : worker(gcnew BackgroundWorker) {
worker->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(this, &Example::OnDoWork);
auto job = gcnew Func<int>(this, &Example::myfunc);
worker->RunWorkerAsync(job);
}
};