tôi có mã này cho C# trong Visual Studio 2012.Vượt qua một đối số cho tác vụ trong C++/CLI?
public Task SwitchLaserAsync(bool on)
{
return Task.Run(new Action(() => SwitchLaser(on)));
}
này sẽ thực hiện phương pháp SwitchLaser
(thành viên không tĩnh công cộng của một lớp MyClass
) như là một nhiệm vụ với lập luận bool trên.
Tôi muốn làm điều gì đó tương tự trong quản lý C++/CLI. Nhưng tôi không thể tìm ra bất kỳ cách nào để chạy một nhiệm vụ, mà sẽ thực hiện một phương pháp thành viên tham gia một tham số.
giải pháp hiện tại là như thế này:
Task^ MyClass::SwitchLaserAsync(bool on)
{
laserOn = on; //member bool
return Task::Run(gcnew Action(this, &MyClass::SwitchLaserHelper));
}
Thực hiện SwitchLaserHelper
chức năng:
void MyClass::SwitchLaserHelper()
{
SwitchLaser(laserOn);
}
Phải có một số giải pháp như trong C# và không để tạo ra các chức năng helper và các thành viên (đây không phải là thread-).
Cảm ơn câu trả lời. Rõ ràng lambda không được hỗ trợ trong mã được quản lý. Tôi vẫn muốn tránh tạo ra các lớp trợ giúp. Những gì tôi đã tìm thấy trong tài liệu là lớp Action cho quản lý C++. Điều này sẽ có khả năng để có một chức năng với một đối số nhưng tôi đã không thể sử dụng nó và đặc biệt là với một phương pháp Task :: Run (hoặc bằng cách nào đó sử dụng nó với một lớp Task). Có một giải pháp mà không có một lớp trợ giúp hoặc phương pháp trợ giúp? –
Bezousek
@Bezousek: 'Tác vụ :: Run' yêu cầu ủy nhiệm' Tác vụ'. Không, một 'Action' không phải là cùng một loại. Các đóng được thực hiện với một lớp trợ giúp. Đây là những gì trình biên dịch C# tạo ra từ mã ví dụ của bạn trong câu hỏi của bạn, và đây là những gì trình biên dịch C++/CLI sẽ làm một ngày nào đó nếu các tính năng lambda được quản lý được thêm vào. –