I’ve come across a bug in the .Net Framework when developing a Windows Forms app, which has a Splash Screen.

On some users machines, the application threw a “Invoke or BeginInvoke cannot be called on a control until the window handle has been created.” exception at startup.

This is seemingly to do with code executing before the splash screen has fully loaded. It appears that the exception happens just after startup and on slow or busy machines.

Microsoft have a workaround for this issue, which I found on the MSDN forums;

http://social.msdn.microsoft.com/Forums/en/winforms/thread/bdc00055-338d-4a4a-a881-14b242b83b83


Create a Boolean user setting “LoadFinished” and set it to be false.

In the Splash Screen load event add this to the start;

My.Settings.LoadFinished = False

and at the end of the event;

My.Settings.LoadFinished = True

In ApplicationEvents file add this;

Private Sub MyApplication_Startup(sender As Object, e _

As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs)_

Handles Me.Startup

 

            Try

                If Not Me.SplashScreen Is Nothing Then

                    While My.Settings.LoadFinished = False

                        System.Threading.Thread.Sleep(50)

                    End While

                End If

                My.Settings.LoadFinished = False

            Catch ex As Exception

                EmailError(ex)

            End Try

 

End Sub

In my solution, I also needed to enclose the above with the correct namespace and partial class construct;

Namespace My

    Partial Friend Class MyApplication

 

        Private Sub MyApplication_Startup(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup

            Try

                If Not Me.SplashScreen Is Nothing Then

                    While My.Settings.LoadFinished = False

                        System.Threading.Thread.Sleep(50)

                    End While

                End If

                My.Settings.LoadFinished = False

            Catch ex As Exception

 

            End Try

        End Sub

    End Class

    

End Namespace

Hope this helps somebody!

By | 2012-10-17T11:36:00+00:00 October 17th, 2012|.Net Framework, Bugs, VB.net, Visual Studio|0 Comments

About the Author:

Leave A Comment