如何捕获事件处理程序的返回值?

时间:2013-08-19 16:44:24

标签: c# events delegates

环境:MS SQL Server,EF,WCF-RIA-Service,Sliverlight

尝试为异步调用完成事件定义一个事件,如:

public event EventHandler<int> MySaveComplete;

此事件是在DB中调用SP并返回ID值(int)。

但是在尝试编译代码时收到了错误消息:

  

类型'int'不能用作类型参数'TEventArgs'   泛型类型或方法'System.EventHandler'。没有   拳击从'int'转换为'System.EventArgs'

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

EventHandler<T>要求泛型参数为EventArgs类型(即从中继承的一个)。所以,你应该创建自己的类:

public class MySaveCompleteEventArgs : EventArgs
{
    public MySaveCompleteEventArgs(int id)
    {
       ID = id;
    }

    public int ID { get; private set; }
}

并将其用作EventHandler<T>参数:

public event EventHandler<MySaveCompleteEventArgs> MySaveComplete;

事件提升:

protected void OnMySaveComplete(int id)
{
    if (MySaveComplete == null)
        return;

    MySaveComplete(this, new MySaveCompleteEventArgs(id));
}

您也可以使用Action<int>委托作为事件类型。