.net VC++;Winforms将成员函数作为参数传递给BackgroundWorker

.net VC++;Winforms将成员函数作为参数传递给BackgroundWorker,.net,winforms,visual-c++,backgroundworker,.net,Winforms,Visual C++,Backgroundworker,作为一个初学者,我正在努力学习这里的语法。 我正在创建一个通用的BackgroundWorker,以避免为我的应用程序中的许多任务中的每一项创建单独的Worker。 我无法理解如何将成员函数传递给RunWorkerAsync() 这是我的DoWork方法的代码: private: System::Void backgroundWorker2_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {

作为一个初学者,我正在努力学习这里的语法。 我正在创建一个通用的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();
}
private:System::Void backgroundWorker2\u DoWork(System::Object^sender,System::ComponentModel::DoWorkEventArgs^e){
Func^ Func=(Func^)e->参数;
e->Result=func();
}
假设我希望BG工作程序运行一个名为myfunc的函数。 我想做这样的事情:RunWorkerAsync(myfunc)


虽然myfunc是同一类的成员,即Form1,但我不清楚挂起的原因是什么,创建Func的语法与订阅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);
    }
};
ref类示例{
背景工人;
void OnDoWork(系统::对象^sender,系统::组件模型::DoWorkEventArgs ^e){
自动作业=安全强制转换(e->参数);
e->Result=job();
}
int myfunc(){
返回42;
}
公众:
示例():worker(gcnewbackgroundworker){
worker->DoWork+=gcnew System::ComponentModel::DoWorkEventHandler(这个,&示例::OnDoWork);
auto job=gcnew Func(此,&示例::myfunc);
worker->RunWorkerAsync(作业);
}
};

如果是c#,您可以扩展EventHandler,但是否有方法概括函数的类型?我的意思是,如果我想调用一个返回String^而不是int的函数,那么你可以使用
Func^