Как я могу принудительно обновить пользовательский интерфейс до продолжения выполнения программы? - PullRequest
1 голос
/ 29 апреля 2020

Например, для следующего кода:

OpenOutputWindow()
Sleep(2)

Окно вывода открывается только ПОСЛЕ режима ожидания в течение 2 секунд. Почему это происходит и как обойти это? Нужно ли мне несколько потоков?

1 Ответ

0 голосов
/ 29 апреля 2020

Да, ваше предположение верно. Обновления пользовательского интерфейса программного обеспечения обычно выполняются в «главном потоке» приложения. Сценарий по умолчанию также запускается в основном потоке и, следовательно, блокирует эти обновления до тех пор, пока для этого не станут доступны некоторые циклы ЦП.

Иногда этого можно достичь, вызвав выделенный Update команды (такие как UpdateImage() или ShowImage() et c.), но это не работает для вывода текста в окне вывода.

Если скрипт выполняется в отдельном потоке, то вы не вижу этого Вы можете поместить скрипт в отдельный поток, как этот (старый метод):

// $BACKGROUND$
OpenOutputWindow()
ClearResults()
Result("\nbefore sleep")
Sleep(2)
Result("\nafter sleep")

Обратите внимание, что первая строка должна быть точно , как это, включая пробел и капитализации. Это также должна быть первая строка.

или вы можете сделать это следующим образом (новый, объектно-ориентированный способ):

class CMyClass
{
    void MyMethod(object self)
    {
        OpenOutputWindow()
        ClearResults()
        Result("\nbefore sleep")
        Sleep(2)
        Result("\nafter sleep")
    }
}
StartThread( Alloc(CMyClass), "MyMethod" )
...