C#開(kāi)啟線程的四種方式示例詳解
一、異步委托開(kāi)啟線程
public static void Main(string[] args){ Action<int,int> a=add; a.BeginInvoke(3,4,null,null);//前兩個(gè)是add方法的參數(shù),后兩個(gè)可以為空 Console.WriteLine("main()"); Console.ReadKey(); } static void add(int a,int b){ Console.WriteLine(a+b); }
運(yùn)行結(jié)果:
如果不是開(kāi)啟線程,像平常一樣調(diào)用的話,應(yīng)該先輸出7,再輸出main()
二、通過(guò)thread類(lèi)開(kāi)啟線程
using System; using System.Threading; public static void Main(string[] args){ Thread t=new Thread(DownLoadFile_My);//創(chuàng)建了線程還未開(kāi)啟 t.Start("http://abc/def/**.mp4");//用來(lái)給函數(shù)傳遞參數(shù),開(kāi)啟線程 Console.WriteLine("main()"); Console.ReadKey(); } //thread開(kāi)啟線程要求:該方法參數(shù)只能有一個(gè),且是object類(lèi)型 static void DownLoadFile_My(object filePath){ Console.WriteLine("開(kāi)始下載:"+filePath); Thread.Sleep(2000); Console.WriteLine("下載完成!"); }
運(yùn)行結(jié)果:
三、通過(guò)線程池開(kāi)啟線程
public static void Main(string[] args){ ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); ThreadPool.QueueUserWorkItem(DownLoadFile_My); Console.WriteLine("main()"); Console.ReadKey(); } static void DownLoadFile_My(object state){ Console.WriteLine("開(kāi)始下載... 線程ID:"+Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); Console.WriteLine("下載完成!"); }
運(yùn)行結(jié)果:
4、通過(guò)任務(wù)開(kāi)啟線程
1>Task開(kāi)啟線程
using System; using System.Threading; using System.Threading.Tasks; public static void Main(string[] args){ Task t=new Task(DownLoadFile_My); t.Start(); Console.WriteLine("main()"); Console.ReadKey(); } static void DownLoadFile_My( ){ Console.WriteLine("開(kāi)始下載... 線程ID:"+Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); Console.WriteLine("下載完成!"); }
運(yùn)行結(jié)果:
2>TaskFactory開(kāi)啟線程
public static void Main(string[] args){ TaskFactory tf=new TaskFactory(); tf.StartNew(DownLoadFile_My); Console.WriteLine("main()"); Console.ReadKey(); } static void DownLoadFile_My( ){ Console.WriteLine("開(kāi)始下載... 線程ID:"+Thread.CurrentThread.ManagedThreadId); Thread.Sleep(2000); Console.WriteLine("下載完成!"); }
運(yùn)行結(jié)果:
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例
這篇文章主要介紹了C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例,幫助大家更好的理解和使用C#,感興趣的朋友可以了解下2020-09-09C#連接SQL Server的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于C#連接SQL Server的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12C# 實(shí)現(xiàn)PPT 每一頁(yè)轉(zhuǎn)成圖片過(guò)程解析
這篇文章主要介紹了C# 實(shí)現(xiàn)PPT 每一頁(yè)轉(zhuǎn)成圖片過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09C# Winform截圖指定控件范圍內(nèi)的圖像的流程步驟
工作所需,需要截圖軟件跑出來(lái)的界面上的圖表,但是窗口本身是可以縮放的,圖表也是做的可以跟著窗體大小一起縮放,所以就寫(xiě)了一個(gè)函數(shù),用于截圖圖表容器內(nèi)的圖像,文中有函數(shù)源碼供大家參考,需要的朋友可以參考下2024-10-10C#?BitArray(點(diǎn)矩陣)轉(zhuǎn)換成int和string的方法實(shí)現(xiàn)
BitArray?類(lèi)管理一個(gè)緊湊型的位值數(shù)組,它使用布爾值來(lái)表示,本文主要介紹了C#?BitArray(點(diǎn)矩陣)轉(zhuǎn)換成int和string的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2022-05-05