Все
У меня есть приложение, которое позволяет пользователю общаться с несколькими последовательными устройствами.
Класс менеджера используется для запуска приложения, которое создает новый поток для каждого последовательного устройства. Внутри этого потока создается последовательное устройство, а поток и объект последовательного устройства сохраняются в классе менеджера для последующего использования.
Затем класс последовательного устройства создает класс com-порта в своем новом потоке, который используется для подключения к com-порту и отправки / получения данных. Когда данные получены, событие запускается до класса последовательного устройства, которое, в свою очередь, запускает событие в классе менеджера, который, в свою очередь, запускает событие в пользовательском интерфейсе, чтобы предупредить пользователя о поступлении новых данных.
Моя проблема заключается в том, что когда класс com-порта запускает событие, уведомляющее класс последовательного порта, класс последовательного порта получает событие и продолжает обработку в потоке com-порта. Аналогично, если пользователь отправляет какую-либо информацию в com-порт, все это выполняется в потоке пользовательского интерфейса.
Я добавлю код в качестве правки позже, но сейчас, если кто-нибудь заметит что-то очевидное, я был бы очень признателен.
Я попытался получить событие в классе устройства с последовательным интерфейсом, а затем вызвал метод, чтобы проверить, запускает ли он его в правильном потоке, но это не помогло.
Я знаю, что поток последовательного устройства работает так же, как я выполняю Application.Run внутри класса после того, как он создал классы com-порта.
Я не использую никаких фоновых рабочих, так как эти потоки должны существовать на протяжении всего жизненного цикла приложения, и я понимаю, что фоновые рабочие предназначены для краткосрочных вычислений.
Большое спасибо
EDIT:
Забыл упомянуть, что это приложение Winforms в .NET 2.0, поэтому Dispatcher недоступен
EDIT:
Итак, похоже, что информация передается внутри потока DataReceived (я думаю, что это также не поток com-порта).
Я также пытался использовать BackgroundWorker для класса последовательных устройств, но это также не имело никакого значения.
Помощь * * 1023