Я разработал обработчик событий, который контролирует последовательный порт и анализирует возвращаемые байты, чтобы получить значение температуры. Мой вопрос: как мне получить эту ценность для остальной части моей программы? Событие и новое значение находятся внутри моего обработчика событий, и, таким образом, остальное мое решение не знает об этом. Я не могу определить метод снаружи, чтобы запросить его, потому что остальное решение не знает, когда новые данные поступают через обработчик событий и изменяет переменную.
Я мог бы, я полагаю, записать его в новую строку текстового поля на форме где-нибудь, но это, кажется, летит перед лицом инкапсуляции.
Есть ли разумный способ сделать это?
Похоже, вы должны, вероятно, открыть другое событие, которое остальная часть вашей системы могла бы подписаться - например, TemperatureChanged
. Затем вы делаете свой обработчик событий (который подключен к последовательному порту), вызывают событие TemperatureChanged
когда он замечает, что температура изменилась.
Событие TemperatureChanged
должно иметь соответствующий тип, чтобы подписчик должен был заботиться только о изменении температуры, а не о необработанных данных, которые вы интерпретировали. (Вероятно, это должно быть EventHandler<TEventArgs>
некоторого описания.)
Еще один вариант заключается в том, что вы можете просто иметь свойство Temperature
и соответствующим образом реализовать INotifyPropertyChanged
, увеличивая это событие, когда вы изменяете свойство в обработчике событий. Это в целом эквивалентно, но более общая цель - много кода (особенно в WPF) знает, как обращаться с INotifyPropertyChanged
.