在活动中筹集活动

时间:2018-05-09 13:13:14

标签: c# events event-handling

我试图让一个事件在另一个事件触发器产生的代码完成后触发。对我来说,这意味着我必须在所述代码结束时触发第二个事件。

这里的第一个事件直接取自我正在使用的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
    }
}

2 个答案:

答案 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