首頁  >  文章  >  後端開發  >  C#的多線程機制初探(2)

C#的多線程機制初探(2)

黄舟
黄舟原創
2016-12-21 14:59:191296瀏覽

下面我們就動手來創建一個線程,使用Thread類別創建線程時,只需提供線程入口即可。線程入口使程式知道該讓這個線程幹什麼事,在C#中,線程入口是透過ThreadStart代理(delegate)來提供的,你可以把ThreadStart理解為一個函數指針,指向線程要執行的函數,當調用Thread. Start()方法後,執行緒就開始執行ThreadStart所代表或說出指向的函數。

打開你的VS.net,新建一個控制台應用程式(Console application),以下這些程式碼將讓你體味到完全控制一個線程的無窮樂趣!

//ThreadTest.cs

using System; 
using System.Threading;

    { 
      public void Beta()
      { 
        while (true) 
        { 
          Console.WriteLine("Alpha.Beta is running in its own thread."); 
        } 
      } 
    };

    public class Simple 
    { 

      public static int Main() 


        Console.WriteLine("Thread Start/Stop/Join Sample");

      Alpha,             〝  〝   〝  )  //這裡建立一個線程,使之執行Alpha類別的Beta()方法 
        Thread oThread = new因此  Thread.Sleep(1); 

        oThread.Abort(); 

    oThread.Abort(); 
    o          、] ; 
        Console.WriteLine(); 
        Console.Wconine("     Console.W長      〔Console.W長〜  Beta  〠〜〵〜〵〝〵〜〝〝〝〝〝〵〜〦〵〦〦. try 
        { 
          Console.WriteL("T     Console.WriteLine("T     Console. Line("T 〜 、〜);   oThread.Start();
        } 
        catch (ThreadStateException)     Console.Write("ThreadStateException trying to restart Alpha.Beta. "); 
          Console.Fstarted 完成"connnowuned);         Console.ReadLine();
        } 
        return 0; 
      } 
    } 
  }

這段程序包含兩個類Alpha和Simple,在創建線程oThread時我們用指向Alpha.Beta()方法的初始化了ThreadStart代理(delegate)對象,當我們建立的執行緒oThread呼叫oThread.Start()方法啟動時,實際上程式執行的是Alpha.Beta()方法:

Alpha oAlpha = new Alpha(); 
  Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); 
  oThread.Start();

接著在Main()函數的while循環中,我們使用靜態方法Thread.Sleep()讓主執行緒停止了1ms,這段時間CPU轉向執行緒oThread。然後我們試著用Thread.Abort()方法終止執行緒oThread,注意後面的oThread.Join(),Thread.Join()方法讓主執行緒等待,直到oThread執行緒​​結束。你可以給Thread.Join()方法指定一個int型的參數作為等待的最長時間。之後,我們試著用Thread.Start()方法重新啟動線程oThread,但是顯然Abort()方法帶來的後果是不可恢復的終止線程,所以最後程式會拋出ThreadStateException異常

 以上就是C#的多線程機制初探(2)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn