0

OK みんな、「読み込み中...」スプラッシュ画面を表示するこのクラスがあります。Form_Loadではなく、Initialize()で呼び出すとうまく機能します。Form_Load の開始時に表示する代わりに、すべてのテーブルがいっぱいになった後に表示され、そこでハングします (ロックなし)。

class innerLoad
{
    //Delegate for cross thread call to close
    private delegate void CloseDelegate();


    //The type of form to be displayed as the splash screen.
    private static frmLoading splashForm;

    static public void ShowSplashScreen()
    {
        // Make sure it is only launched once.
        if (splashForm != null)
            return;

        Thread thread = new Thread(new ThreadStart(innerLoad.ShowForm));
        thread.IsBackground = true;
        //Thread.Sleep(100);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();


    }
    //volatile static public bool isOpen = false;
    static private void ShowForm()
    {

        splashForm = new frmLoading();

        splashForm.ShowDialog();
        splashForm.Dispose();
    }

    static public void CloseForm()
    {
        try
        {
            if (splashForm == null)
                return;
            splashForm.Invoke(new CloseDelegate(innerLoad.CloseFormInternal));
        }
        catch
        {

        }

    }

    static private void CloseFormInternal()
    {
        splashForm.Close();
        splashForm = null;
    }


}

Form_Load コードは次のとおりです。

 private void frmPayGen_Load(object sender, EventArgs e)
    {
        //th1 = new Thread(LoadingForm);
        //th1.Start();
        //Thread.Sleep(500);
        innerLoad.ShowSplashScreen();
        fill();
        innerLoad.CloseForm();

        //Thread.Sleep(500);
    }

私はあなたの助けに感謝し、私はこのサイトが大好きです...私を大いに助けてくれます:D

4

1 に答える 1

0

Form Load イベントの開始時にブレークポイントを設定し、F11 キーを使用してステップ スルーすると、最終的に次の例外が表示されます。

エラー

Form Load イベントの例外は基本的に無視されます。例外がスローされた場合、例外がスローされた行以降は何も実行されませんが、Windows フォームもクラッシュしません。このコード行を削除すると、思い通りに動作するはずです。

于 2012-09-11T10:49:37.173 に答える