c # — как использовать делегат MethodInvoker для синхронизации вызова с потоком элемента управления в Cli Stack Overflow

У меня есть код на C #, но он мне нужен в cli / c ++, но всегда я получаю эти ошибки

«Ошибка 2: ошибка C2955:« BaseLibCS :: MethodInvoker »: использование класса
generic требует общего списка аргументов «

«Ошибка 4, ошибка C2664:
«BaseLibCS :: MethodInvoker :: MethodInvoker (System :: String
^, … cli :: array ^) ‘: невозможно преобразовать параметр 1 из
‘GetNotifications ^ const’ для ‘System :: String ^’ «

«Ошибка 3, ошибка C2102: ‘&’требует L-значение «

«Ошибка 1, ошибка C2872:« MethodInvoker »: неоднозначный символ»

это мой код 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("       ");
}

1

Решение

После одного дня исследования я нахожу проблему, потому что C ++ / CLI не поддерживает анонимных делегатов, это эксклюзивная функция C #. Вам нужно написать целевой метод делегата в отдельном методе класса. Вам также нужно будет объявить тип делегата, MethodInvoker не сможет выполнить эту работу.

большое спасибо и хорошего дня

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]