我正在尝试写入 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/