我创建了一个简单的线程来连续显示一个消息框,直到用户不想进行某些操作。以下是代码:
thread::create { while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] {
doSomething
}}
但是虽然创建了线程但是没有显示消息框。 我怎么能真正看到这些消息框?
答案 0 :(得分:1)
你需要让Tk出现在线程中;默认情况下,只有Thread包存在于从属线程中:
thread::create {
package require Tk
while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] {
doSomething
}
}
此外,您需要在代码中解决许多其他问题。
while
的条件置于{
大括号}
中。如果没有这个,表达式的动态部分将只被评估一次,这实际上不是你想要的while
。thread::wait
,因为这样可以改进进程和线程管理。您的消息框循环需要完全重写。这可能导致此代码:
thread::create {
package require Tk
proc periodicallyMaybeDoSomething {} {
if {[tk_messageBox -message "Do you want to Exit?!!" -type yesno]} {
thread::exit
}
doSomething
# pick a better delay maybe?
after 1 periodicallyMaybeDoSomething
}
after 1 periodicallyMaybeDoSomething
thread::wait
}
如果您使用的是8.6,则可以使用协同程序使代码更加优雅。