程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#多線程開發2:線程掛起,恢復與中止等操作

C#多線程開發2:線程掛起,恢復與中止等操作

編輯:C#入門知識

在博文《C#多線程開發1:使用Thread類創建與啟動線程》中介紹了線程的創建與啟動。本文將在前文的基礎之上,接著介紹線程的掛起,恢復與中止等操作。 首先回憶一下前文的知識點。 我們已經學習到: 1、創建線程 [csharp]   ThreadStart entry = new ThreadStart(CalcSum);   Thread workThread = new Thread(entry);   或者 [csharp]   Thread workThread = new Thread(new ThreadStart(CalcSum));   線程入口方法: [csharp]  static void CalcSum()   {        //do what you want      }     2、啟動線程 [csharp]   workThread.Start();     接下來,我們來研究線程的其他操作。 此文所用實例是在前文實例的基礎上做一點小變動而得到的。 一開始,給出前文的完整實例代碼及運行結果(以供整體把握實例操作)。 [csharp]   using System;   using System.Threading;      namespace ThreadExample   {       class Program       {           static void Main(string[] args)           {                      ThreadStart entry = new ThreadStart(CalcSum);               Thread workThread = new Thread(entry);               workThread.Start();               CalcGap();           }              static void CalcSum()           {               long sum = 0;               for (long i = 0; i < 1000000000; i++)               {                   sum += i;                   if (i % 100000000 == 0 && i!=0)                   {                       Console.WriteLine("workThread-->i={0}:sum={1}",i,sum);                   }               }           }              static void CalcGap()           {               long gap = 0;               for (long i = 1000000000; i >=0 ; i--)               {                   gap = i-1;                   if (i % 100000000 == 0 && i != 0)                   {                       Console.WriteLine("MainThread-->i={0}:gap={1}", i, gap);                   }               }           }       }   }   運行結果:   實例中,存在兩個線程,主線程(Main函數)和工作線程(workThread線程),主線程完成求差操作,工作線程完成求和操作。兩個線程同時運行。   3、掛起線程 掛起線程使用Suspend()方法。 線程被掛起後,操作被停止或進入休眠狀態。 被掛起的線程不占用任何處理器時間。 修改前文實例代碼,修改部分如下: [csharp]   ThreadStart entry = new ThreadStart(CalcSum);   Thread workThread = new Thread(entry);   workThread.Start();   workThread.Suspend();//掛起線程(改動部分)   CalcGap();   再次執行程序,得到如下結果:   從結果中可以看出,此時主線程正常執行,但是工作線程workThread沒有被執行,因為工作線程一啟動後就被掛起了,所以不會被執行。那麼要想工作線程能繼續執行,就需要恢復線程了。   4、恢復線程 線程恢復使用Resume()方法。 再次修改代碼。 [csharp]   Thread workThread = new Thread(new ThreadStart(CalcSum));   workThread.Start();   workThread.Suspend();//掛起線程(改動部分)   CalcGap();   workThread.Resume();//恢復線程(改動部分)   上面的代碼,在主線程執行完後,恢復被掛起的工作線程,執行結果如下。 對於這個結果,我們是可以預見的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved