C#開啟線程的四種方式示例詳解
一、異步委托開啟線程
 public static void Main(string[] args){
  Action<int,int> a=add;
  a.BeginInvoke(3,4,null,null);//前兩個是add方法的參數(shù),后兩個可以為空
  Console.WriteLine("main()");
  Console.ReadKey();
 }
 static void add(int a,int b){
  Console.WriteLine(a+b);
 }
運行結(jié)果:
如果不是開啟線程,像平常一樣調(diào)用的話,應(yīng)該先輸出7,再輸出main()
二、通過thread類開啟線程
    using System;
        using System.Threading;
         public static void Main(string[] args){
  Thread t=new Thread(DownLoadFile_My);//創(chuàng)建了線程還未開啟
  t.Start("http://abc/def/**.mp4");//用來給函數(shù)傳遞參數(shù),開啟線程
  Console.WriteLine("main()");
  Console.ReadKey();
 }
 //thread開啟線程要求:該方法參數(shù)只能有一個,且是object類型
 static void DownLoadFile_My(object filePath){
  Console.WriteLine("開始下載:"+filePath);
  Thread.Sleep(2000);
  Console.WriteLine("下載完成!");
 }
運行結(jié)果:
三、通過線程池開啟線程
 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("開始下載...  線程ID:"+Thread.CurrentThread.ManagedThreadId);
  Thread.Sleep(2000);
  Console.WriteLine("下載完成!");
 }
運行結(jié)果:
4、通過任務(wù)開啟線程
1>Task開啟線程
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("開始下載...  線程ID:"+Thread.CurrentThread.ManagedThreadId);
  Thread.Sleep(2000);
  Console.WriteLine("下載完成!");
 }
運行結(jié)果:
2>TaskFactory開啟線程
 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("開始下載...  線程ID:"+Thread.CurrentThread.ManagedThreadId);
  Thread.Sleep(2000);
  Console.WriteLine("下載完成!");
 }
運行結(jié)果:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對我們的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
上一篇:C# SQLite數(shù)據(jù)庫入門使用說明
欄 目:C#教程
下一篇:c#爬蟲爬取京東的商品信息
本文標(biāo)題:C#開啟線程的四種方式示例詳解
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5006.html
您可能感興趣的文章
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并打開的方法
 - 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#停止線程的方法
 - 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新聞效果的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的方法
 - 01-10C#實現(xiàn)清空回收站的方法
 - 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
 - 01-10C#實現(xiàn)多線程下載文件的方法
 


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
 - 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
 - 01-10WinForm限制窗體不能移到屏幕外的方法
 - 01-10WinForm繪制圓角的方法
 - 01-10C#實現(xiàn)txt定位指定行完整實例
 - 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
 - 01-10C#停止線程的方法
 - 01-10C#實現(xiàn)清空回收站的方法
 - 01-10C#通過重寫Panel改變邊框顏色與寬度的
 - 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
 
隨機閱讀
- 01-10C#中split用法實例總結(jié)
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 08-05織夢dedecms什么時候用欄目交叉功能?
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10delphi制作wav文件的方法
 - 01-11ajax實現(xiàn)頁面的局部加載
 


