最終手段ってやつですね。
と思ったもののロジックエラーに関しては[Project Name]Exceptionを 投げるっていうルールの場合は、ここで一元管理するっていう方針も 十分ありそうですね。Webから来た人はこっちが普通と考えそう。 っていうか自分もそうだった(^_^ゞ
ビジネスロジック例外処理をMainFormの責務と考えるか各Form(Control)の責務とするかによって変わりそうです。Exceptionを生成するのが嫌だ!なんて場合は各Form(Control)で実装になるのかな。
このあたりの経験不足を心より恥じます。
// ThreadExceptionイベント・ハンドラを登録する
Application.ThreadException += new
ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form1());
public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
イベントとデリゲートが利用されていますね。うーすんなり読める(笑)。
Applicationクラスで管理しているスレッドと同一なスレッドなものに対して イベントを発生させるって感じ?
あんまり情報がないのは一般的にダイアログで起動するのが主流なのかなあ。 ダイアログのフルスクリーン。ユーザに業務以外の操作を許させない最狂の ユーザーインターフェース。
確かに二重起動認めると色々面倒くさいことになるのは確かですけど、 業務によってはダイアログよりも使いやすいってものもあるような。ないような。。 (もちろんダイアログでなくても二重起動防止はできますけど)
try
{
new Form1().ShowDialog();
}
catch(Exception e)
{
// 何かエラー処理
}