我试图让一个事件在另一个事件触发器产生的代码完成后触发。对我来说,这意味着我必须在所述代码结束时触发第二个事件。
这里的第一个事件直接取自我正在使用的Vimba Camera API,它的工作原理非常好。我读了一些关于如何正确调用事件的事情(particularly the first anwer here),但我无法让第二个事件正常运行。我可能误解了什么,但是什么?
这是我写的伪代码版本:
public partial class Form1 : Form
{
public delegate void SecondEventHandler(int[] myData);
public event SecondEventHandler SomethingHappened;
//Doing a lot of things irrelevant here
myObj.OnFirstEvent += new Obj.OnFirstEventHandler(this.OnFirstEvent);
private void OnFirstEvent(Data data)
{
//Doing things, and preparing myData
SomethingHappened += new SecondEventHandler(HandleSomethingHappened);
}
void HandleSomethingHappened(int[] myData)
{
//Working with myData
}
}
答案 0 :(得分:0)
如果您想提出附加到第二个事件的方法:
private void OnFirstEvent(Data data)
{
//Doing things, and preparing myData
var h = SomethingHappened;
if(h != null)
h(pass your int[] parameter)
}
答案 1 :(得分:0)
实际上,实现这一目标的最简单但最简洁的方法称为延续传递式。 OnFirstEvent(Data data)
应该成为OnFirstEvent(Data data, Action<int[]> continuator)
。只要它不为null,您的代码就会调用它。
但是我警告你:不要让它在你的代码中成长和传播。从长远的角度来看,调试和维护很困难。如果您希望广泛使用此类方法,请查看reactive extensions
。