私はこのような状況に遭遇しました。 WinFormsアプリケーションには2つの形式があります。メインフォームにはボタンがあり、ユーザーがクリックするとモーダルダイアログが表示されます。ダイアログフォームにもボタンがあり、ユーザーがクリックすると例外がスローされます。モーダルダイアログを使用するWinFormsアプリケーションでの例外処理の動作
例外処理は、アプリケーションがデバッガで実行され、それ自体が実行されている場合、が異なります。ここ は、この動作を再現する、最小限のコードです:デバッグ時に
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
using (var dialog = new Form2())
{
dialog.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show("Oops! " + ex.Message);
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
、例外を上げると、ダイアログを閉じ、Form1.button1_Clickで例外ハンドラは、例外を処理します。
アプリケーション自体を実行しているときに、例外を発生させても、はダイアログを閉じません。これの代わりに、デフォルトのApplication.ThreadExceptionハンドラが呼び出されます。
なぜ動作が異なりますか?お互いにどのようにそれをもたらすか?
ありがとうございます!これは私の質問の「方法」に関する答えです。 "なぜ、何のために"まだ実際... – Dennis
理解しています。 Why/What For私はこれを.NETフレームワークの欠点の1つにするだけです。私は訂正されているかもしれませんが、誰かがアプリケーションが実行されているコンテキストによってこの動作が異なる理由が分かっているかどうかを知ることに興味があります。私はそれがちょっとした落とし穴であることに同意します。 –