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