c# – 通过EventHandler传回一个返回值

我试图写一个API,当我从表中获取数据时,我需要调用一个事件处理程序。这样的事情

    public override bool Run(Company.API api)
    {
        SomeInfo _someInfo = new SomeInfo();

        if (_someInfo.Results == 1)
            return true;
        else
            return false;

        using (MyTable table = new MyTable(api))
        {
            table.WhenData += new EventHandler<DataEventArgs<Record>>(table_WhenData);
            table.WhenDead += new EventHandler<EventArgs>(table_WhenDead);
            table.Start();
        }

    public void table_WhenData(object sender, DataEventArgs<Record> e)
    {
        return true;
    }

我拥有的问题是我不知道如何将返回值从table_WhenData传回给Run方法。

我尝试了很多方法(比如尝试将_someInfo传递给该方法),但是我似乎无法得到正确的语法。

任何建议是非常感谢。

这里的常见模式不是从事件处理程序返回任何数据,而是向事件参数对象添加属性,以便事件的使用者可以设置调用者可以访问的属性。这在UI处理代码中很常见;你会看到Cancel事件的概念在整个地方。

以下是伪代码,没有编译准备。它的目的是展示模式。

public MyEventArgs : EventArgs
{
   public bool Cancel{get;set;}
}

public bool fireEvent()
{
    MyEventArgs e=new MyEventArgs();

    //Don't forget a null check, assume this is an event
    FireEventHandler(this,e);

    return e.Cancel;
}

public HandleFireEvent(object sender, MyEventArgs e)
{
 e.Cancel=true;
}

编辑

我喜欢Jon Skeet这样写道:让EventArgs变得不可靠。也就是说,事件的消费者可以修改EventArgs对象的状态,允许事件的提升者获取该数据。

http://stackoverflow.com/questions/1446256/pass-a-return-value-back-through-an-eventhandler

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 通过EventHandler传回一个返回值