我有一个绑定到wx.Button对象的OnClick函数,当我单击它时,该函数运行,它创建一个线程并开始在幕后工作。在另一个线程完成后,我应该在MainThread上做什么,以使UI保持响应?我正在做这个(在主线程中):
worker_thread = Thread(target = self.DoWork, name = "Solo Worker Thread")
worker_thread.start()
while worker_thread.is_alive():
self.Update() #self being the class that inherits wx.Panel
然而,GUI仍然没有响应。我打电话给错了方法吗?
答案 0 :(得分:1)
你不必做任何事情。只要长时间运行的进程发生在不同的线程中,它就不应该阻止GUI的主循环。有关示例,请参阅以下资源:
如果你看看那些,你会看到你启动一个线程,线程不会阻止UI。
答案 1 :(得分:1)
你的例子
while worker_thread.is_alive():
# do something
将阻止您的GUI并占用所有可用的CPU周期,以询问worker_tread
它是否仍在工作。如果你阻止主线程,wxPython似乎是不可更新的,即使你用wx.Yield
或….Update()
强制更新也不行。
因此请删除while …
声明。您可以执行以下操作来确定旋转线程是否仍然存在:
wx.CallAfter
添加到工作人员的末尾来表示线程结束wx.Timer
(例如,每1000毫秒),如果它仍然存在,则轮询worker_thread
答案 2 :(得分:0)