【问题标题】:How to subscribe to an event dynamically using anonymous methods?如何使用匿名方法动态订阅事件?
【发布时间】:2010-11-19 16:15:15
【问题描述】:

我正在使用LoadControl(String) 动态创建多个UserControls,并希望订阅每个UserControls 的事件。

我的所有控件都继承了一个公共Interface,这需要一个公共Event的实现:

public interface IObjectProcessor
{
    event EventHandler<ObjectProcessedEventArgs> ObjectProcessed;
}

所以我在页面加载事件中执行下一步:

protected void Page_Load()
{
   switch(Request["type"])
   {
     case "user":
     {
        LoadControl("AddUser.ascx", delegate(object sender, ObjectProcessedEventArgs e)
        {
           // do something
        });
        break;
     }
   }
}

private void LoadControl(string path, Action<object, ObjectProcessedEventArgs> action)
{
    var control = (IObjectProcessor)LoadControl(path)
    control.ObjectProcessed // here!
}

如何为该活动订阅代表?

【问题讨论】:

    标签: c# .net asp.net delegates anonymous-methods


    【解决方案1】:

    将Action&lt;object, ObjectProcessedEventArgs&gt; 更改为EventHandler&lt;ObjectProcessedEventArgs&gt;:

    private void LoadControl(string path, EventHandler<ObjectProcessedEventArgs> handler)
    {
            var control = (IObjectProcessor)LoadControl(path)
            control.ObjectProcessed += handler;
    }
    

    【讨论】:

      【解决方案2】:
      control.ObjectProcessed += action
      

      【讨论】:

      • 无法将类型 'Action' 隐式转换为 'EventHandler'
      • 创建委托的显式声明(object sender, ObjectProcessedEventArgs e) 并将其用作输入类型
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2010-09-07
      • 2010-09-16
      相关资源
      最近更新 更多