1、多線程:多線程
一、概念:異步
(線程啓動時,調用傳過來的委託,委託就會執行相應的方法,實現線程執行方法)ide
案例代碼:函數
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace _07多線程 { class Program { static void Main(string[] args) { Console.WriteLine("主線程 {0} 正在執行中...", Thread.CurrentThread.ManagedThreadId); #region 線程 //ThreadStart 無參無返回值的委託 Thread thread = new Thread(ShowMsg);//新開啓一個線程執行一個方法 //建議操做系統把當前線程搞成高級別 thread.Priority = ThreadPriority.Highest; //給開發人員用,來識別不一樣的線程 thread.Name = "zy"; //後臺線程: 若是全部的前臺線程都退出了,那麼後臺線程自動被關閉 thread.IsBackground = true; thread.Start();//並無執行,告訴操做系統準備就緒 //thread.Abort();//關閉線程 Console.ReadKey(); #endregion } static void ShowMsg() { Console.WriteLine("工做線程 {0} 執行中...",Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); } } }
運行截圖:spa
五、Thread類的一些重要成員:操作系統
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Runtime.Remoting.Messaging; namespace _07多線程 { public delegate int AddDel(int a,int b);//聲明一個有參數有返回值的委託 class Program { static void Main(string[] args) { Console.WriteLine("主線程 {0} 正在執行中...", Thread.CurrentThread.ManagedThreadId); AddDel addDel = new AddDel(AddFunc); //1.同步調用 //int c = addDel(1, 2); //2.無回調函數的異步調用 //啓動委託指向的方法來執行,具體由線程池提供一個線程來執行當前的委託指向的方法 //IAsyncResult ascResult = addDel.BeginInvoke(1, 2, null, null); //while (!ascResult.IsCompleted) //{ // //主線程執行的其餘操做 //} ////此EndInvoke方法會阻塞當前線程。直到委託方法執行完畢後, ////並將返回值交給result後,繼續執行後面的代碼 //int result = addDel.EndInvoke(ascResult); //Console.WriteLine(result);//3 //Console.ReadKey(); //3.有回調函數的異步調用 IAsyncResult ascResult = addDel.BeginInvoke(1, 2, MyDelCallBack, 3); //主線程可繼續執行其餘操做 Console.WriteLine("==========="); Console.ReadKey(); } static int AddFunc(int a, int b) { Console.WriteLine("AddFunc工做線程運行中...{0}", Thread.CurrentThread.ManagedThreadId); //Thread.Sleep(1000); return a + b; } //異步委託執行完成了的回調函數 public static void MyDelCallBack(IAsyncResult result) { //把接口類型轉換成實例類型 AsyncResult aResult = (AsyncResult)result; //轉換成咱們本身的委託類型 AddDel del = (AddDel)aResult.AsyncDelegate; //執行完成獲取執行的結果 int addResult = del.EndInvoke(result); int state = (int)aResult.AsyncState;//3 Console.WriteLine("異步完成的回調方法執行的結果是:{0} @{1}", addResult, Thread.CurrentThread.ManagedThreadId); } } }
運行截圖:.net
執行步驟:線程
①從線程池裏獲取一個線程。指針
②執行委託指向的方法(在工做線程裏面執行)code
③調用回調函數(若是是null不執行)。