Кнопка Нажмите, чтобы остановить тест - PullRequest
1 голос
/ 20 января 2011

У меня есть 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.

1 Ответ

1 голос
/ 20 января 2011

Я думаю, что компонент BackgroundWorker может помочь вам в этом.Он предназначен для того, чтобы взять некоторый код и запустить его в фоновом потоке, с простым методом отмены (кнопка вызывает CancelAsync (), и ваш механизм тестирования проверяет свойство CancellationPending, чтобы узнать, нужно ли его отменить).

Что бы вы сделали, это добавили бы один к своей форме.Затем вы оборачиваете свой код тестирования COM-порта в метод, который вы подключаете к обработчику событий DoWork рабочего.

Когда вы хотите начать работать, вызовите runWorkerAsync ().Этот рабочий код после тестирования COM-порта должен проверить свойство CancellationPending и вернуть, если оно истинно.Как я уже упоминал, ваш обработчик событий кнопки для отмены вызывает метод CancelAsync () для установки этого свойства.

BackgroundWorker также поддерживает событие для отображения прогресса, но вам не нужно его подключать, если вы не хотитеиспользовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...