通过EventHandler传回一个返回值 [英] Pass a return value back through an EventHandler

查看:363
本文介绍了通过EventHandler传回一个返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

if(_someInfo.Results == 1)
return true;
else
返回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方法。



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

非常感谢任何建议。

解决方案

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



以下是伪代码,不能编译准备。它的意图是显示模式。

  public MyEventArgs:EventArgs 
{
public bool取消{get ; set;}
}

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

//不要忘记一个空检查,假设这是一个事件
FireEventHandler(this,e);

return e.Cancel;
}

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

修改



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


Im trying to write to an API and I need to call an eventhandler when I get data from a table. Something like this:

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

The problem that Im having is I dont know how to pass a return value back from table_WhenData to the Run method.

Ive tried many ways (like trying to pass _someInfo to the method) but I just cant seem to get the syntax right.

Any suggestion is greatly appreciated.

解决方案

The common pattern here is not to return any data from the event handler, but to add properties to your event argument object so that the consumer of the event can set the properties which the caller can then access. This is very common in UI handling code; you see the Cancel event concept all over the place.

The following is pseudo code, and not compile ready. Its intent is to show the pattern.

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

Edit

I like how Jon Skeet worded this: make the EventArgs mutuable. That is, the consumer of the event can modify the state of the EventArgs object allowing for the raiser of the event to get to that data.

这篇关于通过EventHandler传回一个返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆