子画面を閉じたとき、親画面で決まった処理を行いたい
子画面のClosedイベントにやりたい処理を登録したデリゲートを登録
でもよいんだけど、これだと毎回子画面追加(インスタンス)時にこのデリゲートも一緒に登録してあげないといけない。毎回。
なんかだるいなーおんなじ処理なのになーって思って
OwnedWindowsのChangedEventとかないのかなーとか調べたけど なさそう。。。
だから、自作イベントループ作ってOwnedWindowsの値監視して減少したら発火~なイベント用意。
private void CloseSubWindowEventloop() { int owNum = 1; while (true) { this.Dispatcher.Invoke(new Action(() => { if (owNum > this.OwnedWindows.Count) { this.RefreshListViewEventHandler(); } owNum = this.OwnedWindows.Count; })); // SleepはDispatcher外に置くのがポイント。Dispatcher.Invokeが開きっぱなしだと、メインスレッドに戻れる隙ができず、GUIが固まる。 System.Threading.Thread.Sleep(300); } }
かなり簡潔にかけて気持ちいい!
。。。けど、こんな気軽にワーカースレッド使ってよいものなのだろうか。。。