C#. NET でゾンビプロセス
MessageBox.Show() で表示できるメッセージボックスがある。引数にはそこそこバリエーションがあると思うけど、どれでも同じ話のはず。ついでに FileDialog#ShowDialog() でも同様だった。
作っていたのは、メインとなるフォームが1枚あって、子フォームをぞろぞろ表示できるアプリケーション。 Form#ShowDialog() で表示するものもあったけれど、 Form#Show() で表示するものもあった。
で、 Form#Show() で表示した子フォームからモーダルなメッセージボックスを表示した場合、そのメッセージボックスを閉じる前にメインフォームをクローズすると、全てのフォームをクローズした後もプロセスが残り続ける、という現象が発生したのだった。
これって仕様なのだろうか。それとも使い方がどこか違ったのだろうか。
とりあえず、ユーティリティクラスで全てのメッセージボックスと FileDialog の表示をラップして、ダイアログの表示中はメインフォームの Enabled プロパティを false にすることによって対応できた。一安心。