Editor
単一のクラス(から継承する)を持つWindowsフォームアプリケーションがありますForm
。
public partial class Editor : Form
{
public Editor()
{
InitializeComponent();
Load += Editor_Load;
}
private void Editor_Load(object sender, EventArgs e)
{
cmbConnections.DataSource = ConnectionManager.Connections;
cmbConnections.Visible = false;
}
}
デザイナーが生成したコードを除いて、これはフォームの唯一のコードです(1つのコンボボックス()のみが含まれていますcmbConnections
)。
このConnectionManager
クラスは、静的コンストラクターを持つ静的クラスです。コンストラクターは初期化を行い、重大な状態をテストします。条件が満たされた場合、コンストラクターは例外をスローします。ただし、この例外はVisual Studio 2010のデバッグモードでは発生しません。これをテストするためthrow new Exception()
に、ConnectionManager
の静的コンストラクターのみを配置しました。が使用されるため、イベントハンドラーConnectionManager
で(初めて)初期化されます。Editor_Load
静的コンストラクターが呼び出され、例外がスローされます(出力ウィンドウにのみ表示されます)。残りのEditor_Load
イベントハンドラー(cmbConnections.Visible = false;
)は、期待どおりに実行されません。
しかし、私が理解していないのは、なぜ私のVS2010が例外を飲み込んだのかということです。デバッグは中断されませんでした。try/catchブロックで囲まれていません。メインウィンドウでプログラム実行を続けました。まるでEditor_Load
別のスレッドで実行されたかのようです。
出力ウィンドウにメッセージが表示されます。
Editor.exeで「System.InvalidOperationException」タイプの最初のチャンスの例外が発生しました
Editor.exeでタイプ'System.TypeInitializationException'の最初のチャンスの例外が発生しました
しかし、デバッグモードでは実行が中断されませんでした。
この動作に影響を与える可能性があると私が信じているオプションのいくつかを次に示します。
プロジェクトのプロパティ->ビルド->一般->コードの最適化はチェックされていません。
[ツール]->[オプション]->[デバッグ]->[一般]->[自分のコードだけを有効にする]がオンになっています。
例外設定では、「user-unhandled」のチェックボックスがチェックされています。
私は何かが足りないのですか?この動作は正常ですか?VS2010は未処理の例外をスローすると思いました。そして、ここではこれは処理されておらず、まだ壊れていません。