VB.net ApplicationFramework плюс SplashScreen: InvalidOperationException

Недавно я изменил свое приложение с использования настраиваемого экрана SplashScreen (это была просто форма с таймером, загружавшим основную форму и закрывающим себя) на Application Framework.

Вот что я сделал:

  • Создал новую SplashScreenForm, которая показывает версию приложения и т. Д.
  • Выбрал эту форму в: Мой проект -> Приложение -> SplashScreen
  • Перемещен долго выполняющийся код инициализации из конструктора основного форма в событие запуска ApplicationEvents

Это полностью то, что я хочу. SplashScreen появляется первым, затем запускается событие запуска и выполняет свою работу. Экран 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 () произошла ошибка, но дело в том, что весь стек находится вне моего контроля, поэтому я не могу просто поймать это исключение.

Есть предложения?

6
задан Jürgen Steinblock 28 December 2010 в 08:08
поделиться