有没有办法在不丢失范围的情况下添加和分离事件处理程序?

时间:2011-09-27 08:53:57

标签: c# lambda event-handling scope

使用异步类时,我经常发现我总是需要在字段中存储状态,以便我可以在已完成的方法中访问它们。理想情况下,我希望避免在字段中存储状态,因为这意味着我需要担心多次调用以及它们对字段数据的影响。

我写了这段代码可以工作,虽然Resharper给了我“访问修改后的披露”警告。

public void Test(Action<Result> result)
{
    var myClass = new MyClass();
    EventHandler eventHandler = null;
    eventHandler = (s, e) =>
                        {
                            var mc = (MyClass) s;
                            mc.Completed -= eventHandler;
                            result(mc.Result);
                        };
    myClass.Completed += eventHandler;
    myClass.Run();
}

此代码块是否存在问题,如果没有,是否有更好的方法可以在不创建存储数据的字段的情况下执行此操作并确保某些级别的范围仍然存在?

1 个答案:

答案 0 :(得分:1)

您在此上下文中使用匿名委托绝对没问题。有关特定ReSharper警告的讨论,请参阅以下问题,该问题将详细讨论:

Access to Modified Closure

当你想在首次加载或渲染UI时只执行一次代码时,我会在WPF / Silverlight / WP7应用程序中经常使用你经常说明的模式。