我在课堂上有以下模式:
Foo m_currentFoo;
void ReplaceFooWithDelayedDestruction() {
Dispatcher.BeginInvoke(() => {
var oldFoo = m_currentFoo;
Destroy(oldFoo);
}
m_currentFoo = new Foo();
}
我的问题是,当执行lambda时(可能是在ReplaceFoo ...返回后),oldFoo实际上会引用在BeginInvoke上传递的值,还是m_currentFoo的新值?
答案 0 :(得分:1)
要在被覆盖之前正确捕获当前的foo,你应该在你的封闭函数中使用一个局部变量,否则你冒着让你的旧foo徘徊而不是破坏你新创建的foo的风险。
Foo m_currentFoo;
void ReplaceFooWithDelayedDestruction()
{
var oldFoo = m_currentFoo;
Dispatcher.BeginInvoke(() => { Destroy(oldFoo); } );
m_currentFoo = new Foo();
}