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

And*_*son 9 lambda event-handling c++-cx

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

this.animation.Completed += (s, e) =>
{
   animation.Begin();
};
Run Code Online (Sandbox Code Playgroud)

小智 6

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

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

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


And*_*son 5

这就是我最终要做的。

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