Example #1
0
        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;
        }
Example #2
0
        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();
        }
Example #3
0
 public ManagedThreadExceptionEventArgs(ManagedThread mt)
     : base()
 {
     this.ManagedThread = mt;
 }