У меня есть класс с именем SerialClient
, который отправляет / получает байты через последовательный порт. Когда вызывается SerialClient.Start()
, он входит в бесконечный цикл while, пока не будет вызван SerialClient.Stop()
. У класса есть некоторые свойства, для простоты скажем SerialClient.PropA
, SerialClient.PropB
.
Мне нужно использовать это в графическом интерфейсе. Где в GUI вы можете вызывать Start, Stop и читать свойства по мере их изменения.
Чтобы использовать это в графическом интерфейсе, очевидно, SerialClient
должен работать в потоке как его бесконечный цикл. Итак, я настроил вид со свойствами, соответствующими SerialClient
. Представление вызывает Start()
и Stop()
на докладчике.
В докладчике я создаю новый поток и вызываю start для объекта SerialClient
. Проблема заключается в том, что когда _serialClient генерирует исключение, презентатор не может его перехватить, а также, если такие свойства, как (SerialClient.PropB
), изменяются и вызывают измененные обработчики событий, их необходимо вызывать в потоке графического интерфейса. Я попытался использовать фоновый рабочий, но не смог заставить его работать (изменение свойств все еще затрагивало пользовательский интерфейс из потока, не являющегося пользовательским интерфейсом).
Thread thread = new Thread(_serialClient.Start);
thread.IsBackground = true;
thread.Start();
Там должно быть простое решение, которое я смотрю. GUI просто нужно вызывать методы и читать свойства, а также предотвращать сбои исключений во всем приложении.
Есть идеи?