C# 在事件内部引发事件
我试图在另一个事件的触发器生成的代码完成工作后,立即触发一个事件。对我来说,这意味着我必须在上述代码的末尾触发第二个事件 这里的第一个事件直接取自我正在使用的Vimba Camera API,它工作得非常好。我读了一些关于如何正确调用事件()的内容,但是我无法使第二个事件正常运行。我可能误解了什么,但是什么 以下是我所写内容的伪代码版本:C# 在事件内部引发事件,c#,events,event-handling,C#,Events,Event Handling,我试图在另一个事件的触发器生成的代码完成工作后,立即触发一个事件。对我来说,这意味着我必须在上述代码的末尾触发第二个事件 这里的第一个事件直接取自我正在使用的Vimba Camera API,它工作得非常好。我读了一些关于如何正确调用事件()的内容,但是我无法使第二个事件正常运行。我可能误解了什么,但是什么 以下是我所写内容的伪代码版本: public partial class Form1 : Form { public delegate void SecondEventHandler
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
}
}
如果要引发附加到第二个事件的方法:
private void OnFirstEvent(Data data)
{
//Doing things, and preparing myData
var h = SomethingHappened;
if(h != null)
h(pass your int[] parameter)
}
事实上,实现这一目标的最简单但最干净的方法是继续传球方式<代码>OnFirstEvent(数据数据)应该变成
OnFirstEvent(数据数据,动作延续器)
。只要它不为null,代码就会调用它
然而,我警告您:不要让它增长并传播到您的代码中。从长远来看,很难调试和维护。如果您希望广泛使用这种方法,那么请查看
反应式扩展
,您应该提供一个工作示例来说明您的问题,您需要解释在运行代码时具体发生了什么,以及这与您希望发生的情况有何不同。您不调用出现的handlesomethinghapped
方法,只需将其注册到SomethinHappend
事件。为什么不直接调用出现在OnFirstEvent
末尾的handlesomething
?