西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)C#.NET → C#線程的啟動示例教程

C#線程的啟動示例教程

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/5/26 19:14:15字體大小:A-A+

作者:佚名點擊:65次評論:0次標(biāo)簽: 線程

  • 類型:網(wǎng)絡(luò)共享大。4.3M語言:中文 評分:.0
  • 標(biāo)簽:
立即下載

在.net中為我們提供了兩種啟動線程的方式,一種是不帶參數(shù)的啟動方式,另一種是帶參數(shù)的啟動的方式。

1:不帶參數(shù)的啟動方式,可以使用ThreadStart來實例化Thread,ThreadStart是在.Net Framework 中已經(jīng)定義好的委托,ThreadStart定義為:

public delegate void ThreadStart();

使用方法如下面的代碼:

static void Main(string[] args)
        {
            Demo demo = new Demo();

            Thread t = new Thread(new ThreadStart(demo.Run));
            t.Name = "NoParameterThread";
            t.Start();
        }

   public class Demo
    {
        int interval = 1000;
        /// <summary>
        /// 不帶參數(shù)的啟動方法
        /// </summary>
        public void Run()
        {
            for (int i = 0; i < 10; i++)
            {
                DoSomething();
            }
        }

        private void DoSomething()
        {
            Console.WriteLine(string.Format("當(dāng)前線程:{0},當(dāng)前系統(tǒng)時間為:{1}", Thread.CurrentThread.Name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
            Thread.Sleep(interval);
        }
}

2:帶參數(shù)的啟動方法,就要使用ParameterizedThreadStart委托來實例化Thread了,和ThreadStart一樣的是它也是線程啟動時要執(zhí)行的方法,和ThreadStart不同的是,它在實例化時可以用一個帶有一個Object參數(shù)的方法作為構(gòu)造函數(shù)的參數(shù),而實例化ThreadStart時所用到的方法是沒有參數(shù)的。ParameterizedThreadStart定義為:

public delegate void ParameterizedThreadStart(object obj);

使用方法如下面的代碼:

public class Demo
    {
        int interval = 1000;

        private void DoSomething()
        {
            Console.WriteLine(string.Format("當(dāng)前線程:{0},當(dāng)前系統(tǒng)時間為:{1}", Thread.CurrentThread.Name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
            Thread.Sleep(interval);
        }

        /// <summary>
        /// 帶參數(shù)的啟動方法
        /// </summary>
        /// <param name="param"></param>
        public void Run(object param)
        {
            if (param == null)
                return;

            int.TryParse(param.ToString(), out interval);
            for (int i = 0; i < 10; i++)
            {
                DoSomething();
            }
        }

    }

static void Main(string[] args)
        {
            Demo demo = new Demo();

            Thread parameterThread = new Thread(new ParameterizedThreadStart(demo.Run));
            parameterThread.Name = "ParameterThread";
            parameterThread.Start(2000);
        }

3:在很多時候,我們遇到的情況是要傳遞多個參數(shù),注意到ParameterizedThreadStart委托的參數(shù)類型是一個Object對象,為什么是Object這樣的參數(shù)呢?很簡單,因為在.net中Object是所有類型的基類。這樣我們可以聲明一個類,為這個類增加屬性,這些屬性也就是參數(shù)。

使用方法如下面的代碼:

static void Main(string[] args)
        {
            Demo demo = new Demo();

            ThreadParamter p = new ThreadParamter(2000,100);
            Thread multiParameterThread = new Thread(new ParameterizedThreadStart(demo.CustomerParamterRun));
            multiParameterThread.Name = "MultiParameterThread";
            multiParameterThread.Start(p);
        }

public class Demo
    {
        /// <summary>
        /// 帶多個參數(shù)的啟動方法
        /// </summary>
        /// <param name="param"></param>
        public void CustomerParamterRun(object param)
        {
            if (param == null)
                return;

            ThreadParamter p = param as ThreadParamter;
            if (p != null)
            {
                for (int i = 0; i < p.LoopCount; i++)
                {
                    Console.WriteLine(string.Format("當(dāng)前線程:{0},當(dāng)前系統(tǒng)時間為:{1}", Thread.CurrentThread.Name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    Thread.Sleep(p.Interval);
                }
            }
        }
    }

    public class ThreadParamter
    {
        public int Interval { get; set; }
        public int LoopCount { get; set; }

        public ThreadParamter()
        { }

        public ThreadParamter(int interval, int loopCount)
        {
            this.Interval = interval;
            this.LoopCount = loopCount;
        }
    }

4:在遇到業(yè)務(wù)非常復(fù)雜的時候,上面寫法還是有問題,封裝不夠好,我們可以使用裝飾模式,對上面的代碼進行改進。這樣業(yè)務(wù)發(fā)生改變的時候,我們只需要修改核心的實現(xiàn)部分,調(diào)用的方法可以不用做任何修改,而且調(diào)用方法的代碼非常簡潔。

修改后的代碼如下:

 static void Main(string[] args)
        {
            DecoratorThread t = new DecoratorThread(new ThreadParamter(2000, 100));
            t.Start();
        }

public class ThreadParamter
    {
        public int Interval { get; set; }
        public int LoopCount { get; set; }

        public ThreadParamter()
        { }

        public ThreadParamter(int interval, int loopCount)
        {
            this.Interval = interval;
            this.LoopCount = loopCount;
        }
    }

    /// <summary>
    /// 使用裝飾模式來實現(xiàn)多個參數(shù)的
    /// </summary>
    public class DecoratorThread
    {
        private ThreadParamter threadParamter;
        private Thread thread;


        public DecoratorThread(ThreadParamter threadParamter)
        {
            this.threadParamter = threadParamter;
            thread = new Thread(new ThreadStart(Run));
            thread.Name = "DecoratorThread";
        }

        public void Start()
        {
            if (thread != null)
            {
                thread.Start();
            }
        }

        private void Run()
        {
            for (int i = 0; i < threadParamter.LoopCount; i++)
            {
                Console.WriteLine(string.Format("當(dāng)前線程:{0},當(dāng)前系統(tǒng)時間為:{1}", Thread.CurrentThread.Name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                Thread.Sleep(threadParamter.Interval);
            }
        }
    }

    網(wǎng)盤
    (268)網(wǎng)盤
    網(wǎng)盤是什么網(wǎng)盤是一個云存儲工具,通俗的來說就是你把文件通過網(wǎng)盤儲存在網(wǎng)絡(luò)上。只要你登上網(wǎng),不論在什么地方都能使用。相當(dāng)于網(wǎng)絡(luò)移動盤。用起來挺方便。網(wǎng)盤哪個好其實這個毋庸置疑的百度云網(wǎng)盤是最好的,目前網(wǎng)盤也就那么幾家,對用戶來說只要免費就行了,其他的對我們的普通用戶來說并不是特別重要。網(wǎng)盤下載客戶端大全說明西西軟件園提供市面上主流網(wǎng)盤的客戶端下載,除了網(wǎng)盤客戶端的各種版本之外,西西還會提供一些網(wǎng)盤相...更多>>
    360云盤
    (12)360云盤
    云盤繼面向所有用戶推出永久免費空間后再次發(fā)力,免費贈送用戶大容量空間寓意六六大順。這次的活動為的云盤添加了不少新用戶。云盤除了提供最基本的文件上傳下載服務(wù)外,還提供文件實時同步備份功能,只需將文件放到云盤目錄,云盤程序?qū)⒆詣由蟼鬟@些文件至云盤云存儲服務(wù)中心,同時當(dāng)在其它電腦登錄云盤時自動同步下載到新電腦,實現(xiàn)多臺電腦的文件同步。西西為大家提供了云盤官方最新版下載云盤手機版下載。...更多>>
    • 360云盤v6.6.0.1308 官方最新版

      02-14 / 14.8M

      推薦理由:360云盤是360公司推出的免費網(wǎng)盤工具,而且沒有空間大小限制,和百度云、騰訊微云一樣都是國內(nèi)好用的免費網(wǎng)
    • 360云盤Android手機版V7.2.5 官方安

      01-20 / 8.1M

      推薦理由:360云盤iPhone版及Android版實現(xiàn)在移動端設(shè)備管理查看云盤內(nèi)容,讓您使用云盤更方便!軟件介紹:360安全衛(wèi)士
    • 360云盤Mac同步版V2.1.0 官方版

      07-23 / 3.9M

      推薦理由:360云盤是國內(nèi)最安全、最穩(wěn)定、最快、最大的免費網(wǎng)盤,提供無上限的網(wǎng)盤存儲空間。適用系統(tǒng):Mac OS X 10.7
    • 360云盤v6.6.0.1301 綠色優(yōu)化版

      10-20 / 16.9M

      推薦理由:8月22日2013百度大會,百度云盤1T永久空間領(lǐng)取活動,隨后360也推出了1T空間活動。這些版本應(yīng)該是活動后的升
    • 360云盤同步版V1.9.5.1391 官方安裝

      07-07 / 7.6M

      推薦理由:如果你想像360安全衛(wèi)士那樣使用360云盤,擁有一個屬于自己的漂亮界面,請選擇360云盤獨立版。如果您希望簡潔
    • 360云盤iPhone手機版V6.3.3 官方版

      10-28 / 65.6M

      推薦理由:大家好!在360云盤迷你版、獨立版相繼發(fā)布后得到了很多用戶的反饋,很多用戶希望我們云盤盡快支持移動端設(shè)備

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)