Страница 1 из 1

Блокировка кнопки

Добавлено: 09 ноя 2017, 14:05
GT21
Добрый день
Есть такая задача: сделать так, чтобы кнопка после запуска эвента становилась нерабочей
Я накидал пример, в нем после нажатия на кнопку она блокируется, на 2сек включается индикатор и затем кнопка снова работает. Проблема в том, что если тыкать по кнопке несколько раз пока горит индикатор, то она все равно срабатывает. Если же сделать ее неактивной вручную до запуска, то кнопка не срабатывает
ЗЫ: на "clear" не обращайте внимание, она служебная

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 14:06
GT21
ЗЫ2: если что, прошу скидывать программы в версии лабвью 8

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 14:46
dadreamer
Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 14:49
AlexanderKonoval
это чертовски странно, но если это всё внутри ивента нажатия - то действительно не работает.

при этом если вывести в параллельный цикл - то всё работает так, как нужно.

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 14:57
GT21
dadreamer писал(а):Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 14:58
dadreamer
GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 15:09
GT21
dadreamer писал(а):
GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.
а можно как-нибудь костылями обойтись? переделывать будет очень проблемно

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 15:28
AlexanderKonoval
да там не то чтобы переделка. просто ставите ещё один цикл, связываете его с обработчиком событий при помощи нотифьера. нажали на кнопку - отправили на нотифьер уведомление, что кнопку надо выключить - делаете код - закончили делать код - шлёте нотифьер включить.
дело нескольких минут.

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 16:05
GT21
не совсем понял. так?

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 18:52
taras_33
Как уже указывали, очень плохая идея, в event структуре выполнять код, требующий какого то времени, либо сложных вычислений. Это структура предназначена в первую очередь для обслуживания UI (юзер интерфейса) Но если сильно хочется, то как советовал AlexanderKonoval держите..

Re: Блокировка кнопки

Добавлено: 09 ноя 2017, 19:20
Blackman
Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until... или заблокируйте панель Set Busy на время выполнения подпрограммы.
В более поздних версиях LabVIEW можно поставить "галку" Limit maximum istances ... со значением 1 .

Re: Блокировка кнопки

Добавлено: 10 ноя 2017, 08:03
GT21
Blackman писал(а):Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until...
хм, стоило снять галочку и, похоже, события "нажатие кнопки" больше не встают в очередь (при условии, что в программе есть блокировка кнопки. если блокировки нет, то срабатывает)