gpt4 book ai didi

c# - 如何使用 MethodInvoker 委托(delegate)在 cli c++ 中同步对控件线程的调用

转载 作者:行者123 更新时间:2023-11-30 04:22:10 25 4
gpt4 key购买 nike

我有一个 c# 但是代码,我需要它在 cli/c++ 中,但我总是得到这个错误

"Error 2 error C2955: 'BaseLibCS::MethodInvoker' : use of class generic requires generic argument list"

"Error 4 error C2664: 'BaseLibCS::MethodInvoker::MethodInvoker(System::String ^,...cli::array ^)' : cannot convert parameter 1 from 'GetNotifications ^const ' to 'System::String ^'"

"Error 3 error C2102: '&' requires l-value"

"Error 1 error C2872: 'MethodInvoker' : ambiguous symbol"

这是我的 C# 代码:

private void HandleFarmStateChanged(object sender, ValueChangedEventArgs<CFarm.FarmState> e)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(delegate
{
HandleFarmStateChanged(sender, e);
}));
return;
}

//FarmStateStatusLabel.Text = e.NewValue.ToString();
Console.WriteLine(e.NewValue.ToString());
Console.WriteLine(" ");
}

这是我的 C++ 代码:

void GetNotifications::HandleFarmStateChanged(Object ^sender, ValueChangedEventArgs<CFarm::FarmState> ^e)
{
if (control->InvokeRequired)
{
control->Invoke(gcnew MethodInvoker(this,&GetNotifications::HandleFarmStateChanged(sender, e)));
//}));
return;
}

Console::WriteLine(e->NewValue.ToString());
Console::WriteLine(" ");
}

最佳答案

经过一天的研究,我发现了问题所在,这是因为 C++/CLI 不支持匿名委托(delegate),这是 C# 独有的功能。您需要在类的单独方法中编写委托(delegate)目标方法。您还需要声明委托(delegate)类型,MethodInvoker 无法完成这项工作。

非常感谢,祝你有愉快的一天

关于c# - 如何使用 MethodInvoker 委托(delegate)在 cli c++ 中同步对控件线程的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com