封装事件处理程序

时间:2014-08-26 13:08:48

标签: c# encapsulation

我开发了一个事件处理程序,它监视串行端口并解析返回的字节以获取温度值。我的问题是,如何将这个价值提供给我的其他程序?事件和新值都在我的事件处理程序中,因此我的其余解决方案都不知道它。我无法在外部定义一个方法来请求它,因为解决方案的其余部分不知道新数据何时通过事件处理程序进入并更改变量。

我想,我可以把它写在某个地方的某个文本框的新行上,但这似乎是在封装的情况下飞行。

有没有明智的方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

听起来你应该公开另一个事件,系统的其余部分可以订阅 - 例如TemperatureChanged。然后,当您注意到温度发生变化时,使事件处理程序(连接到串行端口)引发TemperatureChanged事件。

您的TemperatureChanged事件应该具有合适的类型,以便订阅者只需关心温度变化,而不是您已解释的原始数据。 (它应该是某种描述的EventHandler<TEventArgs>。)

另一个选择是你可以拥有Temperature属性,并相应地实现INotifyPropertyChanged,当你在事件处理程序中更改属性时引发事件。这大致相当,但更通用 - 许多代码(特别是在WPF中)知道如何处理INotifyPropertyChanged