Инкапсуляция обработчика событий

1

Я разработал обработчик событий, который контролирует последовательный порт и анализирует возвращаемые байты, чтобы получить значение температуры. Мой вопрос: как мне получить эту ценность для остальной части моей программы? Событие и новое значение находятся внутри моего обработчика событий, и, таким образом, остальное мое решение не знает об этом. Я не могу определить метод снаружи, чтобы запросить его, потому что остальное решение не знает, когда новые данные поступают через обработчик событий и изменяет переменную.

Я мог бы, я полагаю, записать его в новую строку текстового поля на форме где-нибудь, но это, кажется, летит перед лицом инкапсуляции.

Есть ли разумный способ сделать это?

  • 0
    Разве вы не можете просто назначить делегата на ваше мероприятие?
Теги:
encapsulation

1 ответ

3

Похоже, вы должны, вероятно, открыть другое событие, которое остальная часть вашей системы могла бы подписаться - например, TemperatureChanged. Затем вы делаете свой обработчик событий (который подключен к последовательному порту), вызывают событие TemperatureChanged когда он замечает, что температура изменилась.

Событие TemperatureChanged должно иметь соответствующий тип, чтобы подписчик должен был заботиться только о изменении температуры, а не о необработанных данных, которые вы интерпретировали. (Вероятно, это должно быть EventHandler<TEventArgs> некоторого описания.)

Еще один вариант заключается в том, что вы можете просто иметь свойство Temperature и соответствующим образом реализовать INotifyPropertyChanged, увеличивая это событие, когда вы изменяете свойство в обработчике событий. Это в целом эквивалентно, но более общая цель - много кода (особенно в WPF) знает, как обращаться с INotifyPropertyChanged.

  • 0
    Действительно полезно, спасибо. Я попробую маршрут второго события, я думаю. Ура, ник

Ещё вопросы

Сообщество Overcoder
Наверх
Меню