public ManagedThread CreateManagedThread(ThreadStart ts, ManagedThreadDeregistrationModes deregister = ManagedThreadDeregistrationModes.UponSuccess, string threadID = null, int maxStackSize = 0) { if (String.IsNullOrEmpty(threadID)) { threadID = Guid.NewGuid().ToString(); } Thread t = new Thread(delegate() { try { ts(); if (deregister == ManagedThreadDeregistrationModes.UponSuccess) { this.ManagedThreads.Items.Remove(threadID); } } catch (Exception ex) { ManagedThread errorThread = this.ManagedThreads[threadID]; errorThread.UnhandledException = ex; this.OnManagedThreadException(new ManagedThreadExceptionEventArgs(errorThread)); if (deregister == ManagedThreadDeregistrationModes.UponSuccess) { this.ManagedThreads.Items.Remove(threadID); } } finally { if (deregister == ManagedThreadDeregistrationModes.UponCompletion) { this.ManagedThreads.Items.Remove(threadID); } } }, maxStackSize); ManagedThread mt = new ManagedThread(t, threadID); if (this.ManagedThreads.ContainsKey(threadID)) { throw new Exception("The specified new managed Thread ID '" + threadID + "' already exists."); } else { this.ManagedThreads.Items.Add(threadID, mt); } return(mt); }
public ManagedThread CreateManagedThread(ThreadStart ts, ManagedThreadDeregistrationModes deregister = ManagedThreadDeregistrationModes.UponSuccess, string threadID = null, int maxStackSize = 0) { if (String.IsNullOrEmpty(threadID)) threadID = Guid.NewGuid().ToString(); Thread t = new Thread(delegate() { try { ts(); if (deregister == ManagedThreadDeregistrationModes.UponSuccess) this.ManagedThreads.Items.Remove(threadID); } catch (Exception ex) { ManagedThread errorThread = this.ManagedThreads[threadID]; errorThread.UnhandledException = ex; this.OnManagedThreadException(new ManagedThreadExceptionEventArgs(errorThread)); if (deregister == ManagedThreadDeregistrationModes.UponSuccess) this.ManagedThreads.Items.Remove(threadID); } finally { if (deregister == ManagedThreadDeregistrationModes.UponCompletion) this.ManagedThreads.Items.Remove(threadID); } }, maxStackSize); ManagedThread mt = new ManagedThread(t, threadID); if (this.ManagedThreads.ContainsKey(threadID)) throw new Exception("The specified new managed Thread ID '" + threadID + "' already exists."); else this.ManagedThreads.Items.Add(threadID, mt); return mt; }