Кнопки не включаются/отключаются

Моя программа запускает тест через последовательное соединение. После того, как я нажимаю кнопку RUN TEST, все работает отлично. Кнопка RUN TEST исчезнет, ​​и появится кнопка STOP. Сбор данных выполняется, как и ожидалось. Моя проблема в том, что кнопка STOP не реагирует. Весь мой тестовый код запускается в событии нажатия кнопки RUN TEST. Это не прерывается моей второй кнопкой?

Примечание. Я использую свойства whatButton.enable и whatButton.visible. Есть ли еще один, который мне нужно установить, чтобы заставить это работать?

runButton.Enabled = false;
runButton.Visible = false;
STOPbutton.Enabled = true;
STOPbutton.Visible = true;

Остальная часть программы слишком велика, чтобы полностью включить ее.

Любая помощь в этом будет принята с благодарностью.


person Andy    schedule 12.04.2013    source источник
comment
Как вы обрабатываете действие Stop в вашем запущенном потоке? Вы проверяете стоп?   -  person George Johnston    schedule 12.04.2013
comment
Вы пытаетесь сделать STOPbutton видимым в середине этого долгого процесса?   -  person Mike Perrenoud    schedule 12.04.2013
comment
Вам нужно запустить свой код в новом потоке. Запуск из обработчика кликов блокирует остальную часть пользовательского интерфейса.   -  person grantnz    schedule 12.04.2013
comment
Все остальные элементы управления в форме также перестают отвечать на запросы? Вы можете столкнуться с проблемой многопоточности, когда ваш код блокирует поток пользовательского интерфейса, и в этом случае кнопка STOP не будет нажиматься.   -  person Travis Watson    schedule 12.04.2013
comment
... и если кнопка не видна, какая разница, что она тоже отключена?   -  person Sten Petrov    schedule 12.04.2013
comment
Если вы обрабатываете все в одном и том же обработчике, разумнее просто обновить Text в кнопке. (Очевидно, что после того, как вы исправите все проблемы с потоками)   -  person Bart Friederichs    schedule 12.04.2013


Ответы (1)


Дайте угадаю - вы отключаете "Выполнить", включаете "Стоп", выполняете свою задачу, меняете местами включение/выключение на "Выполнить" и "Стоп"?

Ваша проблема в том, что пользовательский интерфейс не обновляется, потому что поток пользовательского интерфейса занят выполнением вашей задачи.

Используйте BackgroundWorker или Task.Run, чтобы создать новый поток для задачи, может потребоваться значительный рефакторинг, чтобы вывести взаимодействие с пользовательским интерфейсом из фонового потока и поддержать отмену.

person Sten Petrov    schedule 12.04.2013