事件导致其他事件

时间:2013-10-16 06:43:56

标签: c# events

我有类似以下的课程,eventA开火可能导致eventB开火,这可能会导致eventC开火:

class classA
{
    public event EventHandler eventA;
}

class classB
{
    public event EventHandler eventB;

    public classB(classA passedInA)
    {
        passedInA.eventA += handleEventA;
    }

    void handleEventA(object sender, EventArgs e)
    {
        /* do some work */
        if (somethingIsTrue)
        {
            EventHandler handler = eventB;
            if (handler != null) { handler(this, args); }
        }
    }
}

class classC
{
    public event EventHandler eventC;

    public classC(classB passedInB)
    {
        passedInB.eventB += handleEventB;
    }

    void handleEventB(object sender, EventArgs e)
    {
        /* do some other work */
        if (somethingElseIsTrue)
        {
            EventHandler handler = eventC;
            if (handler != null) { handler(this, args); }
        }
    }
}

在我看来,像上面那样举起事件(因果关系)是非常合乎逻辑的;但是,有些东西感觉不对,因为如果我不小心,事件处理可能会永远持续下去。

在最糟糕的情况下,eventA处理程序设置为在自己的(新)线程中工作,这些线程永远不会消亡,或者需要很长时间才能消亡,并且线程池已经耗尽。

这是处理因果事件的正确方法吗?

1 个答案:

答案 0 :(得分:0)

以这种方式提升事件是可以的,它被称为责任链。

http://www.oodesign.com/chain-of-responsibility-pattern.html

小心点。