如何使用 MethodInvoker 委托在 cli c++ 中同步对控件线程的调用
how to use the MethodInvoker delegate to synchronize a call to a control's thread in cli c++
我有一个c#但是代码,我需要它在cli/c++,但我总是得到这个错误
这是我的c#代码:"错误2错误C2955: 'BaseLibCS::MethodInvoker':使用类泛型需要泛型参数列表"
"Error 4 Error C2664:"BaseLibCS: MethodInvoker:: MethodInvoker(系统::字符串^……Cli::array ^)':无法将参数1从'GetNotifications ^const '到'System::String ^'"
"Error 3 Error C2102: '&' required l-value"
"错误1错误C2872: 'MethodInvoker':歧义符号"
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不支持匿名委托,这是c#独有的功能。您需要在类的单独方法中编写委托目标方法。你还需要声明委托类型,MethodInvoker不能完成这项工作。
你想得太多了,祝你今天愉快
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 查找素数:错误:控件到达非void函数的末尾
- C++ 获取"控件可能会到达约翰逊-特罗特代码上的非空函数的末尾
- 如何使Windows ListView控件和它们映射到的对象保持同步
- 如何在Visual c++中同步一个进度控件和一组正在加载的对话框中的数据
- 如何使用 MethodInvoker 委托在 cli c++ 中同步对控件线程的调用