在C++/CX中是否可以使用lambda处理事件?例如,如何将以下C#代码片段转换为最佳的C++/CX代码?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
在C++/CX中是否可以使用lambda处理事件?例如,如何将以下C#代码片段转换为最佳的C++/CX代码?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
是的,那是正确的语法。然而,我们建议您使用功能处理程序而不是lambda,因为lambda可能会引入循环引用并防止内存被释放。
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();
});