示例#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);
        }
示例#2
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;
        }