私は最近、アプリをカスタム SplashScreen の使用からアプリケーション フレームワークに変更しました。
これが私がしたことです:
- アプリのバージョンなどを表示する新しい SplashScreenForm を作成しました。
- そのフォームを選択: My Project -> Application -> SplashScreen
- 長時間実行される初期化コードをメイン フォームのコンストラクターから ApplicationEvents スタートアップ イベントに移動しました。
それは私が望むことを完全に行います。SplashScreen が最初に表示され、Startup イベントが発生して機能します。SplashScreen が閉じ、実際のメイン フォームが表示されます。
ここまでは順調ですね。しかし、私たちのお客様は、起動時に次の厄介な例外を受け取ることがあります。
System.InvalidOperationException: Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
bei System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)
bei System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
bei System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
bei System.Windows.Forms.Control.Invoke(Delegate method)
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HideSplashScreen()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.MainFormLoadingDone(Object sender, EventArgs e)
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.Form.WmShowWindow(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
HideSplashScreen() 中にエラーが発生したようですが、スタック全体が制御不能になっているため、この例外をキャッチすることはできません。
助言がありますか?