C#. NET でゾンビプロセス

MessageBox.Show() で表示できるメッセージボックスがある。引数にはそこそこバリエーションがあると思うけど、どれでも同じ話のはず。ついでに FileDialog#ShowDialog() でも同様だった。

作っていたのは、メインとなるフォームが1枚あって、子フォームをぞろぞろ表示できるアプリケーション。 Form#ShowDialog() で表示するものもあったけれど、 Form#Show() で表示するものもあった。

で、 Form#Show() で表示した子フォームからモーダルなメッセージボックスを表示した場合、そのメッセージボックスを閉じる前にメインフォームをクローズすると、全てのフォームをクローズした後もプロセスが残り続ける、という現象が発生したのだった。

これって仕様なのだろうか。それとも使い方がどこか違ったのだろうか。

とりあえず、ユーティリティクラスで全てのメッセージボックスと FileDialog の表示をラップして、ダイアログの表示中はメインフォームの Enabled プロパティを false にすることによって対応できた。一安心。