Roku应用程序在第二个roMessagePort等待时退出而没有错误

Ale*_*sky 2 roku brightscript

这是我能够重现这个问题的最小片段.

Sub Main()
    u = getStringFromKeyboard("Enter username")
    p = getStringFromKeyboard("Enter password")
End Sub

Function getStringFromKeyboard(message = "" As String) As String
    result = ""
    port = CreateObject("roMessagePort")
    screen = CreateObject("roKeyboardScreen")
    screen.SetMessagePort(port)
    screen.SetDisplayText(message)
    screen.AddButton(1, "OK")
    screen.Show()
    while true
        print "waiting..."
        msg = wait(0, port)
        print "done waiting"
        if type(msg) = "roKeyboardScreenEvent" then
            if msg.GetIndex() = 1 then
                result = screen.GetText()
                exit while
            end if
        end if
    end while
    screen.Close()
    return result
End Function
Run Code Online (Sandbox Code Playgroud)

Roku将正确提示用户名,但在提示输入密码之前只会退出主菜单.调试输出表明应用程序在第二次调用wait()时正在进行borking:

waiting...
done waiting
waiting...
Run Code Online (Sandbox Code Playgroud)

这是SDK v4.1和OS v4.2.1006.

有人知道发生了什么事吗?

Ale*_*sky 5

用户gonzotek在Roku开发人员论坛上的回答:

创建立面屏幕.最后一个屏幕关闭后,roku立即退出应用程序.你创建了第一个键盘屏幕,并在getStringFromKeyboard函数中关闭它,并且由于当时没有其他屏幕打开,那就是Roku杀死应用程序的时候.请参阅RokuKevin在这里的解释:viewtopic.php?p = 162550#p162550(注意:他指的是'屏幕闪烁',这可能是他写的时候真的,但是现在需要让屏幕始终在后面打开您的应用程序生命周期中的堆栈:viewtopic.php?p = 321402#p321402).