【发布时间】:2012-09-10 20:14:43
【问题描述】:
是否可以在 C++/CX 中使用 lambda 处理事件?例如,将这段 sn-p 代码从 C# 转换为 C++/CX 的最佳方法是什么?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
【问题讨论】:
标签: event-handling lambda c++-cx
是否可以在 C++/CX 中使用 lambda 处理事件?例如,将这段 sn-p 代码从 C# 转换为 C++/CX 的最佳方法是什么?
this.animation.Completed += (s, e) =>
{
animation.Begin();
};
【问题讨论】:
标签: event-handling lambda c++-cx
是的,这是正确的语法。但是,我们建议您使用函数处理程序而不是 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();
});
【讨论】: