Amazonでお得な買い物

【1分解説】VisualStudioが落ちる原因はユーザーコントロールにあった

Visual Studioが落ちる原因を解決

最近、とあるプロジェクトだけコーディング中にVisual Studioが落ちる現象に出くわしました。

コードを書いている途中に不正終了してしまうので、非常にストレスでしたがようやく原因がわかったので、解決策を書いていきます。

同じ現象で悩んでいる方のヒントになれば幸いです。

目次
スポンサーリンク

デザイン時に処理を実行させないようにしたら解決した

デザイン画面を表示する際に、継承元フォームはユーザーコントロールの処理が実行されてしまうことがあります。

対策としてデザイン中は呼び出さないコードが必要です。

/// <summary>
/// このユーザーコントロールがロードされたときのイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UserControl_Load(object sender, EventArgs e)
{
    // デザイン中は呼び出さない
    if (this.DesignMode) return;   
}

DesignModeで捕捉できないケース

継承元フォームやユーザコントロール等のコンストラクタでは、DesignModeは常にFalseになります。また、入れ子になったユーザーコントロールのDesignModeも常にFalseになります。

AppDomain.CurrentDomain.FriendlyNameは、画面デザイン時に”DefaultDomain”をビルド実行時にはアセンブリファイル名を返すため、一見するとコンストラクタ内でもデザイン時か否かを判断できそうです。しかし、C#2005でClickOnceでの配布による実行時に”DefaultDomain”を返しました。FriendlyNameを正確に把握しないでDesignModeの代用にするのは非常に危険です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

都内の精密機器を作っている会社に勤務している14年目のエンジニアです。趣味は美味しいものを食べることとゴルフ。プログラムについて今まで学んだことをわかりやすく発信するサイトを目指しています。

コメント

コメントする

目次