public static void RunSplash() { Splash loSplash = new Splash(true); // Splash screen flag otherwise it just displays and doesn't unload loSplash.Visible = true; loSplash.TopMost = true; Application.Run( loSplash ); } [STAThread] static void Main(string[] args) { // *** Get the startup path and make sure Web Monitor is running out of it Environment.CurrentDirectory = wwUtils.GetAppStartPath(null); // *** First the splash screen on top on a separate thread ThreadStart delSplash = new ThreadStart(Startup.RunSplash); Thread NewThread = new Thread(delSplash); NewThread.Name = "Splash"; NewThread.Start(); // *** Run the main form on the main thread WebMonitorMain loForm = new WebMonitorMain(); loForm.Show(); loForm.Activate(); // make sure this form becomes active behind splash Application.Run();The Splash form then has a timer on it that fires after x seconds and calls Application.ExitThread() which causes the splash thread to die and release the window.