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

标签 c# events delegates

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

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

public event EventHandler<int> MySaveComplete;

这个事件是调用DB中的一个SP,返回一个ID值(int)。

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

The type 'int' cannot be used as type parameter 'TEventArgs' in the generic type or method 'System.EventHandler'. There is no boxing conversion from 'int' to 'System.EventArgs'

如何解决这个问题?

最佳答案

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>委托(delegate)为事件类型。

关于c# - 如何捕获事件处理程序的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18318925/

相关文章:

javascript - 我的按钮无法使用 jquery

ios - 如何让我的倒数计时器在每次加载 View 时重置?

c# - 启动 WCF 客户端时为 "No default endpoint found"

c# - 当父级滚动时隐藏 float 操作按钮

c# - 从 C# 调用 Oracle 存储过程?

c# - 从 ConfigurationElementCollection 获取配置元素

javascript - 即使提示位于函数之后,我的 Javascript 提示也会在函数之前运行

javascript - 防止滚动从元素冒泡到窗口

c++ - 多态回调实现

ios - 委托(delegate)/协议(protocol)将数据从一个 View Controller 传递到另一个