75206 のコードでとりあえずうまく行っているようにみえます。
見えるのですが System.Diagnostics.Debug.WriteLine で動作ログを確認したところ
SafeInvoke されるハンドラの入口 ->
FormClosing -> FormClosed ->
SafeInvoke 内部で IsDisposed 検出 -> SafeInvoke されるハンドラ出口
なる動作が発生していて、これは Control.Invoke と大差ないことになります。
俺の理解が足らないのか微妙に納得できていません。
これってつまり this == Form1 の死活を見ているわけですよね。
this が生きていて this.label1 が死んでいる状況がもしあればまずいのですが
ありうるのでしょうか?
無い(ことが何かで担保できる)のであれば納得できそうです。
75188 のコードの意図は
this が死んでいたら InvalidOperationException
this.label1 が死んでいたら ObjectDisposedException
Invoke 中に this と this.label1 のかたっぽだけ死ぬか、両方が死ぬかは不明
なので IsDisposed でかたっぽだけチェックしても無駄っぽいから IsDisposed は略して両方 catch
だと思うのです。これには大いに納得できるのですが。
# んで、両方とも FormN の作者は各フォームで毎回 IsDisposed チェックをしなくてよい
# 同じこと何度も書かなくてよいのでダサくない、っと。
|