c# - 如何使用匿名方法动态订阅事件?

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

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

我的所有控件都继承了一个通用的接口(interface),它需要实现一个通用的事件:

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!
}

如何让代理人订阅此事件?

最佳答案

更改Action<object, ObjectProcessedEventArgs>EventHandler<ObjectProcessedEventArgs> :

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

关于c# - 如何使用匿名方法动态订阅事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278217/

相关文章:

c# - 是否可以为某些方法或参数生成编译器/Resharper 警告?

jquery - 无法在浏览器中手动访问 ASMX Web 服务,但可以使用 jQuery

asp.net - 如何在父级中确定弹出的 radWindow 是否已关闭?

c# - 在 OAuth 2.0 中存储 token 的责任

c# - 这个单例实现是线程安全的吗 - 检查代码

c# - 所有物理驱动器的列表

c# - 在 C# 中访问复合设备中的多个 USB 接口(interface)

c# - 事先检查 `System.Activator.CreateInstance(Of T)` 是否会失败

c# - Dotnet 应用程序作为守护进程启动,无法正常工作

c# - 从 .Net Web API 中的 Azure 身份验证 AD 获取用户名