多線程開啟的三種方式


 

第一種《通過委托》

class Program
{
static int Test(int i)
{
Console.WriteLine("test"+i);
return 100;
Thread.Sleep(10); //讓當前線程休眠(暫停當前線程的執行)單位為毫秒ms
}

static void Main(string[] args) //在main方法中執行 一個線程的執行是從上往下執行的
{
//通過委托來開啟一個線程
//Func<int,int> a = Test;

//IAsyncResult ar = a.BeginInvoke(100,null,null); //開啟一個新的線程去執行A所應用的方法
////IAsyncResult類型可以返回當前線程的一種狀態

//Console.WriteLine("main");
////while (ar.IsCompleted==false)//如果當前線程沒有執行完畢的時候
////{
//// Console.WriteLine(".");

////}
////int res = a.EndInvoke(ar);//取得異步線程的返回值
////Console.WriteLine(res);

////檢測線程結束

//bool isEnd = ar.AsyncWaitHandle.WaitOne(1000); //1000毫秒表示超時,如果等待了1000毫秒線程還沒有結束的話那么這個方法會返回false 如果在1000毫秒以內線程結束了會返回true

//if (isEnd)
//{
// Console.WriteLine("這個線程結束了");
// int res = a.EndInvoke(ar);
// Console.WriteLine(res);
//}

//通過回調 檢測線程結束
Func<int,int> a = Test;
//倒數第二個參數是一個委托類型的參數,表示回調函數,就是當線程結束的時候這個委托參數就會調用這個回調方法
//IAsyncResult ar = a.BeginInvoke(100,OnCallBack, a); //開啟線程調用方法

a.BeginInvoke(100,ar=>
{
int res = a.EndInvoke(ar);
Console.WriteLine(res);
},null);

Console.ReadKey();

}

static void OnCallBack(IAsyncResult ar) //這個是第三個參數調用的方式
{
Console.WriteLine("線程END");
Func<int,int> a = ar.AsyncState as Func<int,int>;
int res = a.EndInvoke(ar);
Console.WriteLine(res+"這是第三個參數");
}


免責聲明!

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



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