我已经读过了 http://wiki.wxpython.org/LongRunningTaskshttp://wiki.wxpython.org/CallAfter 在谷歌搜索了很多,但没有找到我的问题的答案。因为在我看来,这将是很多代码,它更多的是一个理论问题,我希望没有代码是可以的。
我想用一个例子来做的事情:我有一个网格(wx.网格)主线程中有复选框。然后我开始一个新的线程(thread.start\u new\u线程)在这里我检查所有行(每行1秒),并检查复选框是否设置。如果设置好了,就完成了一些工作。
如果在开始线程之前读取所有行,则此操作有效。但是我需要在运行线程时读取因为用户应该能够取消选中或选中另一个复选框!但是,如果我在新线程中读取它,有时会引发“非类型对象不可调用”错误。我想是因为wx.CallAfter应该用于与另一个线程中的网格交互。但是CallAfter我不能用来获取返回值。
我不知道如何解决这个问题。也许有些人有更多的线程经验有一些想法?如果您需要额外的数据,请询问,但我认为我的示例包含所有必要的信息。
处理这种事情的一个常见方法是使用排队。排队对象将命令传递给一个或多个工作线程。工作线程将等待从队列中进行拉取,直到队列中有项准备好进行拉取。命令对象的一部分可以是GUI线程中的一个目标来发送消息(以线程安全的方式,如wx.CallAfter公司)当命令完成时。在
你也应该看看wx.lib.delayedresult模块。它与上面的类似,但功能更强大一些。在
相关问题 更多 >
编程相关推荐