Ich habe diesen Code für die C# in Visual Studio 2012.Übergeben Sie ein Argument an Aufgabe in C++/CLI?
public Task SwitchLaserAsync(bool on)
{
return Task.Run(new Action(() => SwitchLaser(on)));
}
Dieser auf SwitchLaser
Methode (public nicht statisches Mitglied einer Klasse MyClass
) als eine Aufgabe mit dem Argumente Bool ausgeführt wird.
Ich möchte etwas ähnliches in verwalteten C++/CLI tun. Aber ich bin nicht in der Lage, einen Weg zu finden, wie man eine Aufgabe ausführt, die eine Member-Methode ausführt, die einen Parameter verwendet.
Aktuelle Lösung ist wie folgt:
Task^ MyClass::SwitchLaserAsync(bool on)
{
laserOn = on; //member bool
return Task::Run(gcnew Action(this, &MyClass::SwitchLaserHelper));
}
Implementierung von SwitchLaserHelper
Funktion:
void MyClass::SwitchLaserHelper()
{
SwitchLaser(laserOn);
}
Es muss eine Lösung wie in C# und nicht Helferfunktionen und Mitglieder (dies ist nicht THREAD zu erstellen).
Danke für die Antwort. Es ist klar, dass Lambda im verwalteten Code nicht unterstützt wird. Trotzdem möchte ich die Erstellung der Hilfsklassen vermeiden. Was ich in der Dokumentation gefunden habe, ist die Klasse Aktion für verwaltetes C++. Dies sollte in der Lage sein, eine Funktion mit einem Argument aufzunehmen, aber ich konnte es nicht verwenden und insbesondere nicht mit einer Task :: Run-Methode (oder irgendwie mit einer Task-Klasse verwenden). Gibt es eine Lösung ohne Hilfsklasse oder Hilfsmethoden? –
Bezousek
@Bezousek: 'Task :: Run 'benötigt einen' Action' Delegaten. Nein, eine 'Aktion' ist nicht vom selben Typ. Closures werden mit einer Hilfsklasse implementiert. Dies erstellt der C# -Compiler aus Ihrem Beispielcode in Ihrer Frage, und das wird der C++/CLI-Compiler eines Tages tun, wenn gemanagte Lambda-Funktionen hinzugefügt werden. –