4

コンストラクターが終了し、メイン フォームが読み込まれる前に、アプリケーションを終了できますか?

起動時に、メイン フォームが読み込まれる前に表示される読み込み画面があります。コンストラクターが終了する前に、コンストラクターからロード画面が表示されます。

メインフォームと終了画面の間の変数を使用して、終了画面で同様のことを行います。終了画面が true を返す場合、メイン フォームでアプリケーションを終了します。

最後に、すべてのスレッド/クラス/ロード/プログラムのセットアップをメイン コンストラクターで行う必要がありますか、それとも間違っていますか?

アップデート:

つまり、program.cs の後と静的メインで

namespace app
{
 public partial class app1 : Form
 {
   public app1()
   {  
      InitializeComponent();
      // open loading screen
      // initialize vars
      // create objects
   }
 // form opens when app1() finishes
  1. app1()すべてを初期化する適切な場所はありますか?
  2. ロード画面が終了する前に「閉じる」メッセージを送信しようとしてapp1()も、機能しません。何も開いていなくてもプロセスは実行されます。
4

6 に答える 6

6

これを試して、


    public partial class MyForm : Form
    {        
    public MyForm()
    {
     if (MyFunc())
        {
            this.Shown += new EventHandler(MyForm_CloseOnStart);
        }
    }

    private void MyForm_CloseOnStart(object sender, EventArgs e)
    {
         this.Close();
    }
    }

それはうまくいくでしょう...

于 2011-07-22T02:22:36.200 に答える
0

メインスレッドが終了すると:

  • バックグラウンド スレッドは「強制終了/放棄」されます
  • フォアグラウンド スレッド (スレッド作成時のデフォルト) は、終了するまで待機します。
于 2009-04-08T12:44:49.370 に答える
0

例外をスローすることによってのみコンストラクターを中断できます。ひそかにそれを行うには、独自の特定の例外をスローします。

class ConstructorAbortedException : Exception { }

class Foo
{
  public Foo()
  {
    if(goesWrong)
    {
      throw new ConstructorAbortedException();
    }
  }
}

void Bar()
{
  try
  {
    Foo f = new Foo();
  }
  catch(ConstructorAbortedException)
  {
    //..
  }
}
于 2009-04-08T12:50:51.350 に答える
0

どのクラスのどのメインコンストラクターですか?

クラスMainにデフォルトの場所がある静的メソッドについて話しているのですか?Program

そのメソッドを使用して、画面上のウィンドウを開く前に発生する必要がある初期化を行います。

明らかに、読み込み画面を使用する必要がある場合は、フォームの周りにメッセージ ループが必要なため、コードを別の場所に移動する必要があり、フォームが閉じるまでメッセージ ループがブロックされます。

フォームを開く前に Main メソッドから戻った場合、明らかにフォームは表示されません。

そうは言っても、あなたの質問は少し漠然としていると思います。あなたが何を求めているのか正確に理解していなかったと確信しています.

何よりもまずMain、コンストラクターではなく、単なる静的メソッドです。

于 2009-04-08T07:49:43.540 に答える