0

次の構成で使用されているメインフォームとスプラッシュフォームの2つのフォームを使用するアプリケーションがあります。

public class MainForm : Form
{
    public MainForm()
    {
       SplashScreen splash = new SplashScreen();

       // configure Splash Screen
    }
}


public class SplashScreen
{
    public SplashScreen()
    {
       InitializeComponent();

       // perform initialization

       this.ShowDialog();
       this.BringToFront();
    }
}

注意:メインフォームは次のコードで作成されます。

Application.Run( new MainForm() );

上記の問題は、スプラッシュを閉じない限り、スプラッシュの構成が発生しないことです。

splash.Close();

これが発生した場合にのみ、MainFormコンストラクターの残りの部分が実行されます。このブロッキング動作を簡単に停止するにはどうすればよいですか?

4

4 に答える 4

1

一般に、別のスレッドでスプラッシュ スクリーンを表示し、プライマリ スレッドにロードを続行させる必要があります。自明ではありません-特に、Control.Invoke準備ができたらスプラッシュ画面を閉じるように要求するために使用する必要があります(スレッドアフィニティ)...

于 2009-02-04T16:29:59.597 に答える
1

あなたが同じことを求めた他の質問について、私はすでに実際の例であなたに答えました:

C#winformスタートアップ(スプラッシュ)フォームが非表示にならない

于 2009-02-04T16:33:02.587 に答える
0

splash.OpenDialog() ではなく、splash.Open() を使用すると、これは発生しません。

于 2009-02-04T16:29:44.620 に答える
0

基本的に、スプラッシュ フォームを表示するだけで、メイン フォームをブロックしないようにします。

これが私がやった方法です:

class MainForm : Form {

    SplashScreen splash = new SplashScreen();  //Make your splash screen member

    public MainForm()
    {
        splash.Show();  //Just show the form
    }

}

次に、 MainForm_Load で、通常どおり初期化を行います。

フォームを表示する準備ができたら (MainForm_Shown):

public MainForm_Shown()
{
    splash.Close();
}

これにより、スプラッシュ スクリーンの表示中に MainForm を正常にロードできます。

于 2009-02-04T16:31:28.690 に答える