问题描述
|
给定以下内容,when0何时绑定?
System.Timer t = new System.Timer( (a)=>{
var foo = Messages.SelectedItem as FooBar;
});
它是绑定的,然后执行匿名方法还是定义了该方法?
解决方法
foo
根本没有绑定,因为它在匿名方法内部。它将调用Messages.SelectedItem。如果Messages是实例属性,则绑定的是\'this \'实例,该实例用于获取Messages。
, 永远不会,由于编译时错误,您会由于BCL中没有System.Timer
类而得到。假设您想要一个System.Threading.Timer,则在此构造函数被调用时即定义了方法的情况下,闭包将被绑定/捕获。如果要在执行方法时绑定它,则需要另一个构造函数重载并传递一个状态。
var t = new System.Threading.Timer(a =>
{
var foo = a as FooBar;
},Messages.SelectedItem,-1,-1);
现在,当回调运行时,它将在执行回调时使用Messages.SelectedItem
值。