是的,这是正确的语法。但是,我们建议您使用函数处理程序而不是lambda,因为lambda可能会引入循环引用并阻止内存被释放。
是否可以在C++/CX中使用lambda处理事件?例如,将这段代码从C#转换为C++/CX的最佳方法是什么?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh755799.aspx
通常,最好使用命名函数,而不是lambda,对于事件处理程序,除非您非常小心地避免循环参考文献。命名函数通过弱捕获"this"指针引用,而lambda通过强引用和创建一个循环引用。有关详细信息,请参见弱参考和断裂循环(C++/CX)。
以下是我最终所做的。
animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^)
{
animtion->Begin();
});