private void StartGinger() { // We start Ginger on STA thread mGingerThread = new Thread(() => { SynchronizationContext.SetSynchronizationContext(new DispatcherSynchronizationContext(Dispatcher.CurrentDispatcher)); // we need sample class - Dummy Ginger.GeneralLib.Dummy d = new Ginger.GeneralLib.Dummy(); Assembly asm1 = d.GetType().Assembly; // Set the app resources to Ginger so image an other will be locally to Ginger Application.ResourceAssembly = asm1; app = new Ginger.App(); WorkSpace.Init(new WorkSpaceEventHandler()); WorkSpace.Instance.RunningFromUnitTest = true; WorkSpace.Instance.InitWorkspace(new GingerWorkSpaceReporter(), new DotNetFrameworkHelper()); app.HideConsoleWindow(); app.StartGingerUI(); GingerPOMBase.Dispatcher = app.GetMainWindowDispatcher(); //Ginger.App.MainWindow.Closed += (sender1, e1) => // Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background); MainWindowPOM = new MainWindowPOM(Ginger.App.MainWindow); // Makes the thread support message pumping System.Windows.Threading.Dispatcher.Run(); }); //// Configure the thread mGingerThread.SetApartmentState(ApartmentState.STA); mGingerThread.IsBackground = true; mGingerThread.Start(); //max 60 seconds for Main window to be ready int i = 0; while (MainWindowPOM == null && i < 600) { Thread.Sleep(100); i++; } // Here Ginger is live and visible isReady = true; }