如何在不使用标志的情况下查明事件是否已在另一个事件处理程序中触发?

时间:2011-12-30 15:35:04

标签: c# wpf events event-handling

我有两个事件A和B.

如果事件A被引发,我需要检查B的事件处理程序。我知道我可以使用旗帜做到这一点,但到目前为止我已经使用了很多旗帜来处理这种情况;并希望使用替代策略。

2 个答案:

答案 0 :(得分:2)

对我而言,这听起来像是糟糕的设计。如果引发了A的事件,它应该做一些像修改某个对象实例的状态的事情。因此,如果引发B事件,通过检查A事件所做的状态更改,您应该知道它是否被引发。如果我在糟糕的设计方面出错,那么请发布有关您的解决方案的更多信息。

示例:

void eventOfA(EventArgs args)
{
    // modify application or whatever state like
    myAppContext.ChangeStatus(2);
    // or
    myWhateverInstance.DoStuff();
}

void eventOfB(EventArgs args)
{
   if(myAppContext.Status == 2)
       // eventOfA was raised
   else
       // eventOfA was not raised

   // or
   if(myWhateverInstance.DidStuff)
       // eventOfA was raised
   else
       // eventOfA was not raised

}

答案 1 :(得分:0)

  1. 也许您应该重新考虑事件的语义,并创建另一个事件。 假设您有MyApplicationExit和SaveMyData事件,并且您不需要在应用程序将立即退出后保存所有内容,您确实可以在以前调用MyApplicationExit之前检入SaveMyData Handler。但是更好的选择是创建另一个在退出时发送的SaveMyDataOnExit事件,并且用户希望保存事物。没有那么多工作,因为你必须区分每个案例。
  2. 您需要的所有布尔值都用于活动?因为如果.Net的事件处理不适合您,您可能还会考虑为自定义事件编写自己的EventHandler,定义AddHandler,RemoveHandler和RaiseEvent的含义。因此,您可以创建任何复杂的关系beetwenn事件,例如提高一个事件可以自动 - 或者在事件arg上提供条件 - 引发另一个事件,或者更适合您需要的任何事件。