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



我有两个事件A和b

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

对我来说这听起来像是糟糕的设计。如果A的事件被引发,它应该做一些事情,比如修改一些对象实例的状态。如果事件B被触发,通过检查事件A的状态变化,你应该知道事件B是否被触发。如果我在糟糕的设计方面是错误的,那么请发布更多关于您的解决方案的信息。

的例子:

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
}

    也许你应该重新考虑你的事件的语义,并创建另一个。假设你有MyApplicationExit和SaveMyData事件,并且你不需要在应用程序退出后立即保存所有内容,你确实可以在SaveMyData Handler中检查MyApplicationExit之前是否被调用。但是一个更好的选择是创建另一个SaveMyDataOnExit事件,当你退出并且用户想要保存东西时发送这个事件。没有那么多的工作,因为你必须区分每种情况。
  1. 所有你需要的布尔值是事件?因为如果。net的事件处理不适合你,你也可以考虑为你的自定义事件编写自己的eventandler,定义AddHandler, RemoveHandler和RaiseEvent的含义。所以你可以在事件之间创建任何复杂的关系,比如引发一个事件可以自动地——或者在事件参数上有一个条件——引发另一个事件,或者任何更适合你需要的。

相关内容

  • 没有找到相关文章

最新更新