Thread-ThreadStart

public sealed class Thread : CriticalFinalizerObject, _Thread
 {
        [System.Security.SecuritySafeCritical]  // auto-generated
        public Thread(ThreadStart start) {
            if (start == null) {
                throw new ArgumentNullException("start");
            }
            Contract.EndContractBlock();
            SetStartHelper((Delegate)start,0);  //0 will setup Thread with default stackSize
        }
 }
ThreadStart是一个无参无返回值的委托方法,实例化委托,也就是传递一个方法进去。
        [System.Security.SecurityCritical]  // auto-generated
        private void SetStartHelper(Delegate start, int maxStackSize)
        {
             #if FEATURE_CORECLR
            // We only support default stacks in CoreCLR
            Contract.Assert(maxStackSize == 0);
            #else
            // Only fully-trusted code is allowed to create "large" stacks.  Partial-trust falls back to
            // the default stack size.
            ulong defaultStackSize = GetProcessDefaultStackSize();
            if ((ulong)(uint)maxStackSize > defaultStackSize)
            {
                try
                {
                    SecurityPermission.Demand(PermissionType.FullTrust);
                }
                catch (SecurityException)
                {
                    maxStackSize = (int)Math.Min(defaultStackSize, (ulong)(uint)int.MaxValue);
                }
            }
            #endif
 
            ThreadHelper threadStartCallBack = new ThreadHelper(start);
            if(start is ThreadStart)
            {
                SetStart(new ThreadStart(threadStartCallBack.ThreadStart), maxStackSize);
            }
            else
            {
                SetStart(new ParameterizedThreadStart(threadStartCallBack.ThreadStart), maxStackSize);
            }                
        }
namespace System.Threading {
    using System.Security.Permissions;
    using System.Threading;
 
    // Define the delegate
    // NOTE: If you change the signature here, there is code in COMSynchronization
    //  that invokes this delegate in native.
   [System.Runtime.InteropServices.ComVisible(true)]
    public delegate void ThreadStart();
}

 

 
posted @ 2021-11-22 11:17  vba是最好的语言  阅读(114)  评论(0编辑  收藏  举报