У меня есть Test Engine, который выполняет несколько тестов, пока не будут выполнены все тесты.
У каждого тестового объекта есть методы Execute
и Resume
. Эти методы возвращают статус:
- Ожидание ответа от COM-порта
- Ожидание нажатия кнопки от пользователя
- Тестирование завершено.
В графическом интерфейсе пользователь запускает механизм тестирования, нажав кнопку. Другими словами, событие щелчка для кнопки вызывает метод запуска Test Engine.
Затем тест может отправить сообщение через COM-порт и должен приостановиться, пока сообщение не будет получено из COM-порта. У меня есть прерывание COM-порта, которое обрабатывает сообщение, а затем вызываю метод возобновления Test Engine.
Для теста может потребоваться информация от пользователя. В этом случае тест отображает сообщение в текстовом поле, а затем возвращается. Обработчик события нажатия кнопки вызовет метод возобновления Test Engine.
Это работает нормально, за исключением того, что теперь мне нужно, чтобы тест неоднократно отправлял сообщение через COM-порт и получал ответ. Этот цикл будет прерван только нажатием кнопки в графическом интерфейсе.
Я узнал, что обработчик прерывания COM-порта работает в другом потоке, чем графический интерфейс. Тесты выполняют методы графического интерфейса пользователя с помощью делегата.
Как я могу заставить Test Engine проверять нажатие кнопки, одновременно ожидая сообщения COM-порта? Механизм тестирования должен проверять нажатие кнопки после получения сообщения через COM-порт, чтобы система сообщений оставалась синхронизированной.
Примечания:
Я думал о том, чтобы запустить Test Engine в рабочем потоке, с семафорами для сообщения, полученного из COM-порта, и еще одним семафором для кнопки остановки. Механизм тестирования ожидает семафора сообщения, просыпается, обрабатывает сообщение, а затем проверяет семафор кнопки остановки.
Использование C # с Visual 2010 Express в Windows 7.