public static void Initialize()
        {
            Thread thread = new Thread(new ThreadStart(ShowSplash));

            thread.IsBackground = true;
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();

            while (m_Splash == null)
            {
                Thread.Sleep(200);
            }

            if (InitializeModules())
            {
                if (m_Splash != null)
                {
                    m_Splash.ThreadClose();
                }

                if (Globals.MainForm != null)
                {
                    Application.Run(Globals.MainForm);
                }
            }
        }
        // --------------------------------------------------------------
        #region LOCAL FUNCTIONS
        // --------------------------------------------------------------

        /// <summary>
        /// Initialize the app
        /// </summary>
        private static void Initialize()
        {
            // create the splash screen thread (in background)
            Thread thread = new Thread(new ThreadStart(ShowSplash))
            {
                IsBackground = true
            };

            // set the thread as single thread
            thread.SetApartmentState(ApartmentState.STA);

            // start the thread
            thread.Start();

            // wait for the splash screen to be created
            while (m_Splash == null)
            {
                Thread.Sleep(200);
            }

            // initialize the app modules
            if (InitializeModules())
            {
                // is the splash screen gone? close that thread
                if (m_Splash != null)
                {
                    m_Splash.ThreadClose();
                }

                // if the main form is not visible yet, we show it
                if (Globals.MainForm != null)
                {
                    Application.Run(Globals.MainForm);
                }
            }
        }