Изобретатель приложений — логика

Этот очень простой код ведет себя не так, как должен, и я не совсем понимаю, почему.

Код изобретателя приложения:

When Button1.Click
#1  set Label1.Text to "Wait"
#2  call ProcedureXYZ
#3  set Label1.Text to "Done"

Вот в чем проблема. ProcedureXYZ занимает 5 секунд. Итак, Label1 должно было отобразить «Подождите», но это не так. Вместо этого строки №1, №2, №3 выполняются одновременно. Другими словами, он исчезает на 5 секунд, а затем отображается «Готово» (это потому, что он сразу переопределяет «Подождите»).

Таким образом, на 5 секунд мое приложение кажется замороженным, пока ProcedureXYZ не завершит свои вычисления. У меня вопрос: как отображать "Подождите", когда ProcedureXYZ выполняется 5 секунд?

Я пытаюсь использовать часы, чтобы запустить сообщение «Подождите», но это тоже не работает. Единственное, что работает, это отображать предупреждающее сообщение, но мне не нужно всплывающее сообщение.


person NewCoder    schedule 11.12.2016    source источник
comment
вообще говоря, вам нужны потоки.   -  person rupinderjeet    schedule 11.12.2016


Ответы (1)


Почему в App Inventor это не работает, объясняется здесь:
Модель обработки событий в App Inventor от Lyn

Для этого вам придется использовать компонент Clock, см. псевдокод ниже. В Designer установите очень маленькое значение TimerInterval (например, 10 миллисекунд) и установите для свойства TimerEnabled значение false.

Button1.Click событие

set Label1.Text to "Wait"
set Clock.TimerEnabled to true

Clock.Timer событие

set Clock.TimerEnabled to false  
call ProcedureXYZ
set Label1.Text to "Done"
person Taifun    schedule 11.12.2016