我可以在C ++ / CX中使用lambda处理事件吗?

时间:2012-09-18 14:32:58

标签: event-handling lambda c++-cx

是否可以使用C ++ / CX中的lambda处理事件?举个例子,将这段代码从C#转换为C ++ / CX的最佳方法是什么?

this.animation.Completed += (s, e) =>
{
   animation.Begin();
};

2 个答案:

答案 0 :(得分:6)

是的,这是正确的语法。但是,我们建议您使用函数处理程序而不是lambda,因为lambda可以引入循环引用并防止释放内存。

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh755799.aspx

  

一般来说,最好使用命名函数,而不是lambda,   对于事件处理程序,除非您非常小心避免循环   引用。命名函数通过弱捕获“this”指针   引用,而lambda通过强引用捕获它   创建循环引用。有关更多信息,请参阅弱   引用和中断周期(C ++ / CX)。

答案 1 :(得分:4)

这是我最终做的事情。

animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^)
{
   animtion->Begin();
});