我在cs文件中有一个类:
public class ThreadData
{
private int index;
public ThreadData(int index)
{
this.index = index;
}
public static ThreadDataOutput DoWork(ThreadDataInput input)
{
return new ThreadDataOutput();
}
}
现在,我有c ++代码试图初始化一个新任务和我们上面的函数:
int numOfThread = 2;
array<Task^>^ taskArr = gcnew array<Task^>(numOfThread);
for (int i = 0; i < numOfThread; i++)
{
ThreadData^ td = gcnew ThreadData(i);
ThreadDataInput^ input = gcnew ThreadDataInput(i);
Task<ThreadDataOutput^>^ task = gcnew Task<ThreadDataOutput^>(td->DoWork, input);
taskArr[i] = task;
taskArr[i]->Start();
}
Task::WaitAll(taskArr, 300 * 1000);
以下代码在编译时返回2个错误:
我还尝试在cs文件中声明这样的委托:
public static Func<ThreadDataInput, ThreadDataOutput> DoWork2 = delegate(ThreadDataInput taskDataInput)
{
return new ThreadDataOutput();
};
但我不知道如何从c ++ \ cli代码中调用它
任何人都可以帮助我理解如何定义可以参数化的cli委托吗?
感谢
答案 0 :(得分:2)
为了在C ++ / CLI中创建委托实例,您需要显式地构造它,并指定它将与类和&amp;分别调用的对象。要调用的方法。
gcnew Func<TInput, TOutput>(theObject, &TheClass::MethodToInvoke)
请注意,要调用的方法是在C ++样式中指定的。
将其替换为您的任务创建,我相信此声明适合您:
Task<ThreadDataOutput^>^ task = gcnew Task<ThreadDataOutput^>(
gcnew Func<ThreadDataInput^, ThreadDataOutput^>(td, &ThreadData::DoWork),
input);
在您在评论中发布的代码中,您错过了调用委托的对象。
gcnew Func<Object^, Object^>(td, &ThreadData::DoWork)
^^