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

标签 c# return-value event-handling

我正在尝试写入 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 处理代码中很常见;你到处都能看到取消事件的概念。

以下是伪代码,还没有编译好。它的目的是显示模式。

public class 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 对象的状态,从而允许事件的引发者获取该数据。

关于c# - 通过 EventHandler 传回一个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1446256/

相关文章:

c++ - 从 XLL 函数返回 unicode 字符串

c++ - 定位事件处理程序

android - 如何获取自定义网格子项点击事件?

c# - 如何防止事件的订阅者相互冲突?

c# - 为什么要使用 ChannelFactory 来实例化 WCF 代理而不是服务引用?

c# - ViewModel 替换复杂的匿名对象

javascript:使用 IF 语句而不是 OR 设置默认值

python - 在 C 中,从函数返回 2 个变量

c# - 了解内存高效 C# 编程的好网站/博客/书籍

c# - 如何在 .csproj 文件中使用 MSBuild 条件测试编译器指令?