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; }
internal void StartAsyncTransfer() { #if ThreadTracking ManagedThread thread = new ManagedThread(TransferThreadProc); thread.Name = "GSF.Net.Ftp.FileTransferer.TransferThreadProc() [" + m_remoteFile + "]"; #else Thread thread = new Thread(TransferThreadProc); thread.Name = "Transfer file thread: " + m_remoteFile; #endif thread.Start(); }
public ManagedThreadExceptionEventArgs(ManagedThread mt) : base() { this.ManagedThread = mt; }