如何解决C#闭包绑定
| 给定以下内容,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
值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。