我在Visual Studio 2012將參數傳遞給C++/CLI中的任務?
public Task SwitchLaserAsync(bool on)
{
return Task.Run(new Action(() => SwitchLaser(on)));
}
這將執行與在參數bool,任務(一類MyClass
的公共非靜態成員)SwitchLaser
方法對C#此代碼。
我想在託管的C++/CLI中做類似的事情。但我無法找到任何方式來運行一個任務,它將執行一個參數的成員方法。
目前的解決辦法是這樣的:
Task^ MyClass::SwitchLaserAsync(bool on)
{
laserOn = on; //member bool
return Task::Run(gcnew Action(this, &MyClass::SwitchLaserHelper));
}
實施SwitchLaserHelper
功能:
void MyClass::SwitchLaserHelper()
{
SwitchLaser(laserOn);
}
必須有在C#像一些解決方案,而不是創建輔助函數和成員(這不是線程安全的)。
感謝您的回答。很明顯,在託管代碼中不支持lambda。儘管如此,我還是想避免創建輔助類。我在文檔中找到的是用於託管C++的Action類。這應該是能夠採用一個參數的函數,但我無法使用它,特別是與Task :: Run方法(或以某種方式與Task類一起使用它)。有沒有輔助類或輔助方法的解決方案? –
Bezousek
@Bezousek:'Task :: Run'需要一個'Action'委託。不,「動作」不是同一類型。閉包是用一個輔助類實現的。這就是C#編譯器在您的問題中從您的示例代碼中創建的內容,並且這是C++/CLI編譯器將在某一天添加託管lambda功能時將執行的操作。 –