あなたが推測したように、自分のイベントハンドラからUIオブジェクトを破壊するときは注意が必要です。現在のイベントハンドラはまだアクティブですが、キューにまだ残っている他の保留中のイベントが存在する可能性があります。また、ターゲットオブジェクトが配信時に破棄された場合、クラッシュする可能性があります。
現時点で起こっている可能性のある保留中のイベントハンドラが完了し、実行したい破壊を除いてUIオブジェクトで処理するのを待つことがない限り、破棄を延期することをお勧めします。それを行う最善の方法はwx.CallAfter
を使用することです。次にイベントループが空になったときに渡すパラメータを持つ関数を呼び出します。暗黙のうちに、処理待ちのUIオブジェクトや問題のUIオブジェクトに送信されるものは何もありません。
あなたの場合、すぐにノートブックからページを削除し、ページウィンドウを非表示にするなどの作業は安全です。次に、wx.CallAfter
を使用して、ページウィンドウのDestroy
メソッドを呼び出して、必要な他のクリーンアップを実行する、ノートブッククラスの関数を呼び出します。これらの2つのタスクを分割することが推奨される理由は、関数が呼び出されるまでに時間がかかるためではありませんが、場合によっては一時的な状態で瞬間的に瞬間的にちらつくほど長くなる可能性があるため、ユーザー。