我想在笔记本中动态创建和删除页面。在主类中,我成功地创建并添加了带有按钮的页面。这些页面当然是一个单独的类,并且里面有一个按钮。我知道我可以将按钮放在笔记本之外并将它们从主类中删除,但我想使用页面自己的按钮来自毁整个页面,因为它不再需要了。
抱歉,我没有发布任何代码,但我是通过手机发布的。此外,需要一个最小的工作示例似乎不是那么具体的问题。
我想在笔记本中动态创建和删除页面。在主类中,我成功地创建并添加了带有按钮的页面。这些页面当然是一个单独的类,并且里面有一个按钮。我知道我可以将按钮放在笔记本之外并将它们从主类中删除,但我想使用页面自己的按钮来自毁整个页面,因为它不再需要了。
抱歉,我没有发布任何代码,但我是通过手机发布的。此外,需要一个最小的工作示例似乎不是那么具体的问题。
正如您已经猜到的那样,从它们自己的事件处理程序中销毁 UI 对象时需要小心。不仅当前事件处理程序仍然处于活动状态,而且可能还有其他未决事件仍在队列中,如果目标对象在交付时已被销毁,那么您可能会发生崩溃。
最好的办法是将销毁推迟到当前和可能的挂起事件处理程序完成之后,并且除了您想要执行的销毁之外,UI 对象上没有任何事情等待完成。最好的方法是使用wx.CallAfter
. 它将在下次事件循环清空时调用带有参数的函数,因此隐含地没有任何其他内容等待完成或发送到有问题的 UI 对象。
在您的情况下,立即从笔记本中删除页面并隐藏页面窗口是安全的。然后使用wx.CallAfter
调用一些函数(可能在笔记本类中),该函数调用页面窗口的Destroy
方法并执行任何其他必要的清理。我之所以建议拆分这两组任务,并不是因为调用函数需要很长时间,而是在某些情况下它可能长到足以在瞬态状态下瞬间闪烁,因此外观不太流畅用户。