Это довольно длинный пост, и я попытаюсь изо всех сил объяснить работу приложения, которое я разработал, и хочу, чтобы вы помогли продлить его на будущее.Проектирование приложения Windows для сохранения состояний в дочерних формах MDI
Мне нужно создать приложение на базе Windows на C#, которое в основном отслеживает события от внешнего источника связи и отображает данные на графике. Приложение подписывается на события из объектов связи и обновляет пользовательский интерфейс, когда и когда есть события данных. Компонент графа внутри этих классов мониторинга будет использовать данные внутри буферов данных связи для построения данных в виде линейного графика.
Для достижения этой цели, я создал класс Factory, который будет создать экземпляр определенного класса мониторинга (CWindowFirst или CWindowSecond и т.д.), основываясь на информации о модели я обеспечиваю (устройство модели типа).
Эти классы реализуют стандартный контракт (IFactoryInterface) для инициализации, сбора данных и операций очистки. Поэтому в любой момент времени я могу создать экземпляр определенного класса и запустить операцию мониторинга для получения данных и заполнения графа в процессе. Пока что так хорошо, я могу отображать данные в виде графика для конкретного устройства. Также в настоящий момент я уничтожаю (удаляю) объект CWindowFirst всякий раз, когда основное приложение выбирает другое окно (т. Е. CWindowSecond или CWindowThird).
Как говорится в «Разработка SW, единственная константа - это изменение», появилось новое требование, когда мне нужно предоставить пользователю возможность функции Пауза/Стоп для графика. Я должен уметь приостанавливать график (т. Е. Приостанавливать передачу данных) и переходить в главное окно, а также иметь возможность открыть другое окно (CWindowSecond), где-нибудь там будет бит с графиком (должно быть в состоянии приостановить сообщение здесь также). Вернитесь в первое окно CWindowFirst и возобновите ранее сохраненную передачу данных.
Теперь возникает вопрос о миллионе $, как мне достичь или, скорее, изменить существующий проект для реализации функции, как описано выше.
Я могу придумать следующую реализацию, но я не уверен, что это действительно прагматичный.
По вопросу команды Pause я
- Остановить связь (отменить подписку события связи) на паузу.
- Сохранение состояния буферов данных и графика событий в коллекции.
- Сериализуйте полный объект в файл перед выходом.
- По возвращению в ту же форму, я десериализация объекта
- Получить буфер данных событий из десериализованного объекта
- Populate в графике и включить обработчик событий, так что я продолжаю получать событие от уровня связи ,
Эксперты там мне нужна ваша помощь здесь. Пожалуйста, направляйте/предлагайте улучшения/делитесь идеей
Какие виды связи? Вы контролируете многоадресную рассылку или tcp? Вы мастер (клиент) или подчиненный (сервер). Ответы необходимы, чтобы придумать правильную архитектуру. Вам нужно отправить команду на сервер, чтобы прекратить отправку? – jdweng
Связь осуществляется через TCP. Хотя моя заявка откровенно не волнует, если ее через TCP/USB Serial. Это в основном просто раб (приемник). Если я подписываюсь на коммуникационные события, я получаю данные, если я откажусь от подписки, я не получу данные –
Когда это произойдет, выполните следующие действия: 1) продолжая оттуда, 2) сбросьте экран, 3) мгновенно отобразите все ожидающие данные данные, ? – Fendy