1. 程式人生 > >多線程(二)啟動線程:需要傳參和不需要傳參兩種情況

多線程(二)啟動線程:需要傳參和不需要傳參兩種情況

void ise tel 線程 reg val adl 方法 委托

1、不需要傳參:

 class Program7
    {
        private static void ExecuteInForeground()
        {
            DateTime start = DateTime.Now;
            var sw = Stopwatch.StartNew();
            Console.WriteLine("Thread {0}: {1}, Priority {2}",
                              Thread.CurrentThread.ManagedThreadId,
                              Thread.CurrentThread.ThreadState,
                              Thread.CurrentThread.Priority);
            
do { Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", Thread.CurrentThread.ManagedThreadId, sw.ElapsedMilliseconds / 1000.0); Thread.Sleep(500); } while (sw.ElapsedMilliseconds <= 5000
); sw.Stop(); } static void Main7777(string[] args) { //如果該方法不具有任何參數,則傳遞ThreadStart委托給構造函數。 //使用的是這個構造函數 //public delegate void ThreadStart() var th = new Thread(ExecuteInForeground); th.Start(); Thread.Sleep(
1000); Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId); Console.ReadLine(); } }

2、需要傳參:

class Program8
    {
        private static void ExecuteInForeground(Object obj)
        {
            int interval;
            try
            {
                interval = (int)obj;
            }
            catch (InvalidCastException)
            {
                interval = 5000;
            }
            DateTime start = DateTime.Now;
            var sw = Stopwatch.StartNew();
            Console.WriteLine("Thread {0}: {1}, Priority {2}",
                              Thread.CurrentThread.ManagedThreadId,
                              Thread.CurrentThread.ThreadState,
                              Thread.CurrentThread.Priority);
            do
            {
                Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                                  Thread.CurrentThread.ManagedThreadId,
                                  sw.ElapsedMilliseconds / 1000.0);
                Thread.Sleep(500);
            } while (sw.ElapsedMilliseconds <= interval);
            sw.Stop();
        }
        static void Main(string[] args)
        {
            //如果該方法具有參數,則傳遞ParameterizedThreadStart委托給構造函數。
            //使用的是這個構造函數
            //public delegate void ParameterizedThreadStart(object obj)  
            var th = new Thread(ExecuteInForeground);
            th.Start(4500);
            Thread.Sleep(1000);
            Console.WriteLine("Main thread ({0}) exiting...",
                              Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine("主線程執行完畢");
            Console.ReadLine();
        }
    }

多線程(二)啟動線程:需要傳參和不需要傳參兩種情況