程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 線程傳參,

C# 線程傳參,

編輯:C#入門知識

C# 線程傳參,


傳參方式有兩種:

       1、創建帶參構造方法類 傳參

       2、利用Thread.start(8)直接傳參,該方法會接收一個對象,並將該對象傳遞給線程,因此在線程中啟動的方法

             必須接收object類型的單個參數。

       3、閉包傳參 該方法使用lambda表達式。

           3.1 lambda表達式中使用任何局部變量時 ,C# 會自動生成一個類,並將該變量作為該類的一個屬性。實際上與第一種方式基本一樣,但是我們無需定義類,C#會自動編譯實現該類。

           3.2 使用lambda表達式會導致一些問題,如使用多個lambda表達式中使用相同的變量,他們會共享該變量值

 

          

using System;
using System.Threading;

namespace testThread_Transferparameters
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //1
            var sample = new ThreadSample(10);
            var threadone = new Thread(sample.CountNumbers);
            threadone.Name = "ThreadOne";
            threadone.Start();
            threadone.Join();
            Console.WriteLine("------------------");
             
            //2
            var threadtwo = new Thread(count);
            threadtwo.Name = "threadtwo";
            threadtwo.Start(8);
            threadtwo.Join();
            Console.WriteLine("------------------");
            
             //3
            var threadthree = new Thread(() => CountNumbers(20));
            threadthree.Name = "threadthree";
            threadthree.Start();
            threadthree.Join();
            Console.WriteLine("------------------");

            int i = 10;
            var threadfour = new Thread(() => PrintNumber(i));
            i = 20;
            var threadfive = new Thread(() => PrintNumber(i));
            threadfour.Start();
            threadfive.Start();
        }
        static void count(object iterations)
        {
            CountNumbers((int)iterations);
        }
        static void CountNumbers(int iterations)
        {
            for (int i = 1; i <= iterations; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(0.5));
                Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
            }
        }
        static void PrintNumber(int number)
        {
            Console.WriteLine(number);
        }
    }

    class ThreadSample
    {
        private readonly int _iterations;
        public ThreadSample(int iterations)
        {
            _iterations = iterations;
        }
        public void CountNumbers()
        {
            for (int i = 1; i <= _iterations; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(0.5));
                Console.WriteLine("{0} prints {1}", Thread.CurrentThread.Name, i);
            }
        }
    }
}

 結果如下:

        

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved