Я пишу код C # WPF, чтобы шпионить за последовательным портом (инструмент отладки).Я создаю два виртуальных порта, соединенных как нуль-модем с com0com (приложение), и использую мой код для считывания одного порта и немедленной отправки другого порта, и наоборот:
HOST <--> Virtual COM <--> C# spy app <--> Real COM <--> TARGET
Для этого у меня естьсоздал один класс для управления объектом SerialPort, который создает событие DataReceived.В этой реализации у меня было бы два экземпляра этого класса, один для управления связью HOST, а другой для цели.Пользовательский интерфейс будет анализировать и отображать данные только из этих двух классов.
Проблема: последовательные порты работают в потоках, отличных от пользовательского интерфейса ... и у меня два из них пытаются обновить один и тот же пользовательский интерфейс.
Мой подход к этому состоит в создании открытого List<T>
, где T может быть struct { byte[] data; Direction direction}
, к которому каждый обработчик событий будет добавлять свои данные, тогда как пользовательский интерфейс может анализировать эти данные.Обработчики событий будут выполнять List.Add (), а пользовательский интерфейс - List.RemoveAt (0), пока существуют данные.Скорость передачи данных: 19200 бит / с (1 байт каждые 0,5 мс).
Вопросы: Могут ли обработчики событий из двух разных последовательных портов прерывать друг друга и повреждать данные списка?Повлияет ли использование объекта List на производительность?Должен ли я попробовать массив массивов и просто отслеживать индексы?
Или я должен сделать что-то совершенно другое?