突发事件

本文关键字:突发事件 | 更新日期: 2023-09-27 17:47:49

我在一个应用程序中有多个层,我发现自己不得不将事件弹出到GUI层以进行状态栏更改等。我发现自己不得不编写重复的代码,其中每一层都只订阅来自较低层的事件,然后在回调中只在链上引发一个事件。有更有效的方法吗?

突发事件

如果您所做的只是从另一个事件处理程序中启动一个事件处理器,那么您可以去掉中间人,直接在事件的添加/删除块中挂接事件处理程序。

例如,如果您有一个带有"SaveButtonClick"事件的UserControl,并且您只想在单击UserControl上的"SaveButton"时调用事件处理程序,则可以执行以下操作:

public event EventHandler SaveButtonClick
{
    add { this.SaveButton.Click += value; }
    remove { this.SaveButton.Click -= value; }
}

现在,您不需要任何代码来激发SaveButtonClick事件-当SaveButton.Click事件被引发时(即当有人单击该按钮时),它将自动被激发。

Peter Rilling发布了一种在winforms中模拟事件气泡/广播的方法。它简单有效。

http://www.codeproject.com/KB/cs/event_broadcast.aspx

阅读Jeremy Miller的博客"The Shade Tree Developer",尤其是他的编写自己的CAB系列-他所说的命令模式可能正是你所需要的。

除非我看到更多的设计。。很难给出一个好的答案。

WPF(自动)在UI组件/控件树中弹出气泡事件。。。这一点现在已经构建到框架中。所以我想这是推荐的方式:)

绕过中间人Layer2的问题是Layer1和Layer3现在相互认识。。。被耦合。所以这是一种权衡。。如果你对联轴器满意的话。。消除中间人/发明一个具有这种责任的专门组件。然而,如果您希望第3层是可热插拔的(低耦合),我会说继续冒泡。

您可以有一个只支持事件的中央通道。此通道必须是独立的,因此层只能发布或订阅它。

看看UpdateControls.NET。这些控件甚至可以通过业务逻辑层发现数据模型中它们所依赖的部分。您不必编写任何代码来通知他们。