最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#多線程等待所有子線程結(jié)束的示例

 更新時間:2020年12月04日 09:58:24   作者:Bruce-  
這篇文章主要介紹了C#多線程等待所有子線程結(jié)束的示例,幫助大家更好的理解和學(xué)習(xí)c#編程語言,感興趣的朋友可以了解下

在使用多線程過程中,可能會遇到在一些情況下必須等待子線程全部執(zhí)行結(jié)束后主線程才進(jìn)行下一步,

做法如下:

 //在使用多線程過程中,可能會遇到在一些情況下必須等待子線程全部執(zhí)行結(jié)束后主線程才進(jìn)行下一步,做法如下
      List<ManualResetEvent> manualEvents = new List<ManualResetEvent>();//創(chuàng)建線程等待集合
      for (int i = 0; i < 64; i++) //WaitHandles 的數(shù)目必須少于或等于 64 個,所以最大線程數(shù)為64
      {
        MB m = new MB();//自定義類,用于傳參
        m.mre= new ManualResetEvent(false);
        m.ID = i;

        manualEvents.Add(m.mre);
        ThreadPool.QueueUserWorkItem(ThreadMethod, m);
      }
      WaitHandle.WaitAll(manualEvents.ToArray());//等待所有線程結(jié)束
      Console.WriteLine("Thread Finished!");
private static void ThreadMethod(object obj)
    {
      MB m = (MB)obj;
      Thread.Sleep(1000);//等待1秒,用于模擬系統(tǒng)在處理事情
      m.mre.Set();//將事件設(shè)置為終止?fàn)顟B(tài)
      Console.WriteLine("Thread execute:" + m.ID);
    }

以上方法在處理時當(dāng)線程數(shù)超過64時報錯 WaitHandles 的數(shù)目必須少于或等于 64 個,所以最大線程數(shù)為64
解決方法如下:

        using (var countdown = new MutipleThreadResetEvent(list.Count))
        {
          for (int i = 0; i < list.Count; i++)
          {
            //開啟N個線程,傳遞MutipleThreadResetEvent對象給子線程
            Param p = new Param();
            p.countdown = countdown;
            p.Path = pa[i];
            ThreadPool.QueueUserWorkItem(MyHttpRequest, p);
          }

          //等待所有線程執(zhí)行完畢
          countdown.WaitAll();
        }
public class MutipleThreadResetEvent: IDisposable
  {
    private readonly ManualResetEvent done;
    private readonly int total;
    private long current;

    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="total">需要等待執(zhí)行的線程總數(shù)</param>
    public MutipleThreadResetEvent(int total)
    {
      this.total = total;
      current = total;
      done = new ManualResetEvent(false);
    }

    /// <summary>
    /// 喚醒一個等待的線程
    /// </summary>
    public void SetOne()
    {
      // Interlocked 原子操作類 ,此處將計數(shù)器減1
      if (Interlocked.Decrement(ref current) == 0)
      {
        //當(dāng)所以等待線程執(zhí)行完畢時,喚醒等待的線程
        done.Set();
      }
    }

    /// <summary>
    /// 等待所以線程執(zhí)行完畢
    /// </summary>
    public void WaitAll()
    {
      done.WaitOne();
    }

    /// <summary>
    /// 釋放對象占用的空間
    /// </summary>
    public void Dispose()
    {
      ((IDisposable)done).Dispose();
    }
  }

以上就是C#多線程等待所有子線程結(jié)束的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 多線程等待子線程結(jié)束的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用winform簡單導(dǎo)出Excel的方法

    C#使用winform簡單導(dǎo)出Excel的方法

    這篇文章主要介紹了C#使用winform簡單導(dǎo)出Excel的方法,結(jié)合實例形式分析了WinForm操作Excel文件的寫入導(dǎo)出等相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • C#中查找Dictionary中的重復(fù)值的方法

    C#中查找Dictionary中的重復(fù)值的方法

    這篇文章主要介紹了C#中查找Dictionary中的重復(fù)值的方法,需要的朋友可以參考下
    2015-09-09
  • c#利用system.net發(fā)送html格式郵件

    c#利用system.net發(fā)送html格式郵件

    這篇文章主要介紹了c#利用system.net發(fā)送html格式郵件的示例,帶有抄送、密送、附件功能,需要的朋友可以參考下
    2014-02-02
  • C#中使用UDP通信實例

    C#中使用UDP通信實例

    這篇文章主要介紹了C#中使用UDP通信實例,非常實用的技巧,需要的朋友可以參考下
    2014-08-08
  • c# 用ICSharpCode組件壓縮文件

    c# 用ICSharpCode組件壓縮文件

    今天,主要總結(jié)下,windows平臺下,zip的壓縮與解壓的方法,用ICSharpCode組件,有此需求的朋友可以參考下本文
    2021-06-06
  • VS2019屬性管理器沒有Microsoft.Cpp.x64.user的解決辦法

    VS2019屬性管理器沒有Microsoft.Cpp.x64.user的解決辦法

    這篇文章主要介紹了VS2019屬性管理器沒有Microsoft.Cpp.x64.user的解決辦法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C#檢查遠(yuǎn)程或本地磁盤使用率

    C#檢查遠(yuǎn)程或本地磁盤使用率

    要檢查磁盤的使用情況確定程序放哪個服務(wù)器和清理垃圾,所以寫個小程序幫忙檢查。本文給大家介紹C#檢查遠(yuǎn)程或本地磁盤使用率的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • c#實現(xiàn)攝像頭拍照功能示例

    c#實現(xiàn)攝像頭拍照功能示例

    這篇文章主要介紹了c#實現(xiàn)攝像頭拍照功能示例,需要的朋友可以參考下
    2014-04-04
  • C#使用Enum.TryParse()實現(xiàn)枚舉安全轉(zhuǎn)換

    C#使用Enum.TryParse()實現(xiàn)枚舉安全轉(zhuǎn)換

    這篇文章介紹了C#使用Enum.TryParse()實現(xiàn)枚舉安全轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#語音識別用法實例

    C#語音識別用法實例

    這篇文章主要介紹了C#語音識別用法,實例分析了C#利用微軟操作系統(tǒng)自動的語音識別功能,讀取信息的技巧,需要的朋友可以參考下
    2015-01-01

最新評論

大英县| 手机| 聂荣县| 榆树市| 张家川| 绥江县| 古浪县| 拉萨市| 长垣县| 城固县| 昌平区| 弋阳县| 湖州市| 阳曲县| 莱州市| 普安县| 合山市| 孟州市| 永昌县| 大埔县| 两当县| 乌兰浩特市| 阿克| 唐山市| 湘阴县| 壤塘县| 开江县| 安徽省| 大关县| 惠州市| 西青区| 玛沁县| 农安县| 保德县| 南投县| 彰化县| 横峰县| 社旗县| 通江县| 台北市| 教育|