9

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

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

2 回答 2

6

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

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

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

于 2012-10-09T20:22:29.427 回答
5

这就是我最终做的事情。

animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^)
{
   animtion->Begin();
});
于 2012-09-18T14:52:48.493 回答