public void RunClientManagerStartupLisp() { if (ClientManager.StartedUpLisp) { return; } ThreadStart mi = () => { DLRConsole.SafelyRun(clientManager.StartUpLisp); }; StartUpLispThread = Thread.CurrentThread; clientManager.outputDelegate = WriteLine; DLRConsole.DebugWriteLine("Current Thread = " + Thread.CurrentThread.Name); if (false && StartUpLispThread.ApartmentState == ApartmentState.STA) { mi(); } else { StartUpLispThread = new Thread(mi) { Name = "StartUpLispThread" }; StartUpLispThread.SetApartmentState(ApartmentState.STA); StartUpLispThread.Start(); } }
/// <summary> /// runs in a STA thread (by creating one) Does not "join" /// </summary> /// <param name="args"></param> public static void RunInThread(ApartmentState must, ThreadStart runMain, bool blocking) { if (!blocking || Thread.CurrentThread.ApartmentState != must) { Thread newThread = new Thread(runMain); newThread.SetApartmentState(must); newThread.Start(); if (blocking) { newThread.Join(); } return; } else { runMain(); } }
/// <summary> /// runs in a STA thread (by creating one) Does not "join" /// </summary> /// <param name="args"></param> public static void RunInThread(ApartmentState must, ThreadStart runMain, bool blocking) { if (!blocking || Thread.CurrentThread.ApartmentState != must) { Thread newThread = new Thread(runMain); newThread.SetApartmentState(must); newThread.Start(); if (blocking) newThread.Join(); return; } else { runMain(); } }
public static Thread InSTAThread(ThreadStart invoker, string fullName) { Thread t = new Thread(new ThreadStart(() => { Thread ct = Thread.CurrentThread; try { if (ct.ApartmentState != ApartmentState.STA) ct.SetApartmentState(ApartmentState.STA); } catch (Exception) { } try { invoker(); // ct.Abort(); } catch (Exception e) { GlobalWriteLine(fullName + " " + e); } })); t.Name = "InSTAThread " + fullName; try { if (t.ApartmentState != ApartmentState.STA) t.SetApartmentState(ApartmentState.STA); } catch (Exception) { } t.Start(); return t; }
public void RunClientManagerStartupLisp() { if (ClientManager.StartedUpLisp) return; ThreadStart mi = () => { DLRConsole.SafelyRun(clientManager.StartUpLisp); }; StartUpLispThread = Thread.CurrentThread; clientManager.outputDelegate = WriteLine; DLRConsole.DebugWriteLine("Current Thread = " + Thread.CurrentThread.Name); if (false && StartUpLispThread.ApartmentState == ApartmentState.STA) { mi(); } else { StartUpLispThread = new Thread(mi) { Name = "StartUpLispThread" }; StartUpLispThread.SetApartmentState(ApartmentState.STA); StartUpLispThread.Start(); } }