私は、これは、引数のブール上でタスクとしてSwitchLaser
メソッド(クラスMyClass
の公開非静的メンバー)を実行します2012年C++/CLIでタスクに引数を渡しますか?
public Task SwitchLaserAsync(bool on)
{
return Task.Run(new Action(() => SwitchLaser(on)));
}
のVisual StudioでC#の場合、このコードを持っています。
私はマネージC++/CLIで同様のことをしたいと思います。しかし、私はどのようにどのように1つのパラメータを取るメンバメソッドを実行するタスクを実行する方法を見つけることができません。
現在のソリューションは、このようなものです:SwitchLaserHelper
機能の
Task^ MyClass::SwitchLaserAsync(bool on)
{
laserOn = on; //member bool
return Task::Run(gcnew Action(this, &MyClass::SwitchLaserHelper));
}
実装:
void MyClass::SwitchLaserHelper()
{
SwitchLaser(laserOn);
}
ありC#でのようないくつかのソリューションでなければならず、ヘルパー関数とメンバーを作成しない(これはスレッドセーフではありません)。
お返事ありがとうございます。ラムダはマネージコードでサポートされていないことは明らかです。それでも私はヘルパークラスの作成を避けたいと思います。私がドキュメントで見つけたのは、マネージC++のクラスアクションです。これは1つの引数を持つ関数を取ることができるはずですが、私はそれを使用できませんでした。特にTask :: Runメソッドで(または何らかの形でそれをTaskクラスで使用して)使用できませんでした。ヘルパークラスやヘルパーメソッドのないソリューションはありますか? –
Bezousek
@Bezousek: 'Task :: Run'は' Action'デリゲートを必要とします。いいえ、「アクション」は同じタイプではありません。クロージャは、ヘルパークラスで実装されます。これは、あなたの質問にあなたのサンプルコードからC#コンパイラが作成するものです。管理されたラムダ機能が追加されると、C++/CLIコンパイラはいつかそれを実行します。 –