C#中線程的建立、掛起、繼續與銷毀


在c#中,對於不需要考慮嚴格時序的任務,線程是一個很方便的東西。
將沒一個單獨需要執行的事情都作為一個線程,在主函數中調用就可以了。

新建一個項目之后,需要引入線程相關的命名空間,里面包含了線程相關class的定義、功能函數等內容。

using System.Threading;

先定義一個thread類型的變量,其中th是該線程的名字,如果需要對該線程進行操作,就是對變量th的操作;ThreadMethod則是該線程所執行的函數。

Thread th = new Thread(ThreadMethod); //創建線程 

線程函數內容如下,該函數是每隔500ms像控制台打印一次東西。

static void ThreadMethod()
        {
            while (true)
            {
                Console.Write("thread\r\n");
                Thread.Sleep(500);
            }
        }

一邊用到線程的情況都是一個線程一直監聽並處理一些事情,所以會有一個while(true),即永不退出。
由於線程和主進程一樣,是一直在執行並且常駐內存的,(一般的子函數都是在堆棧中運行,調用的時候就在堆棧中臨時租借一塊地,函數執行完了再把那塊地兒還給你。而static關鍵字就是說,系統啊你要給我在內存里專門開一塊兒地方放置我的代碼塊,我以后可是你的固定客戶),所以線程函數也和主函數一樣,需要加static關鍵字,並且是 void 類型的。
當線程需要啟動時(假設你這個線程是統計景區人流量的,作為主管的你在家睡大覺,然后請一個零時工過來干貨):

th.Start(); //啟動線程

當線程需要掛起時(現在你親戚來了你給她開個后門直接放進去,這個時候就暫時不需要統計了),執行Suspend函數可以實現線程的掛起:

th.Suspend();//掛起線程

當線程需要繼續開始時(親戚都進去玩了),執行Resume函數可以實現線程的繼續運行:

th.Resume();//繼續線程

當線程需要停止時(下班了),執行Abort函數可以實現線程的中止:

th.Abort();//中止線程

整體代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static void ThreadMethod()
        {
            while (true)
            {
                Console.Write("thread\r\n");
                Thread.Sleep(500);
            }
        }
        static void Main(string[] args)
        {
            Console.Write("main start\r\n");
            Thread th = new Thread(ThreadMethod); //創建線程 
            th.Start(); //啟動線程
            for (int i = 0; i < 10; i++)
            {
                if (i == 3) th.Suspend();
                if (i == 5) th.Resume();
                if (i == 7) th.Abort();
                //if (i == 9) th.Resume(); /*異常:已引發: "線程目前未運行;無法使其繼續。*/
                Console.Write(i + "\r\n");
                Thread.Sleep(1000);
            }
            Console.Write("main end\r\n");
            Console.ReadKey();
        }
    }
}

運行效果如下圖:
在這里插入圖片描述

 

出處:https://blog.csdn.net/qq_27508477/article/details/87177332


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM