小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#多線程編程:線程的啟動

 orion360doc 2011-01-25
C#多線程編程:線程的啟動
來源:中國自學編程網(wǎng)   發(fā)布日期:2009-08-03  
在實例化Thread的實例,需要提供一個委托,在實例化這個委托時所用到的參數(shù)是線程將來啟動時要運行的方法。在.net中提供了兩種啟動線程的方式,一種是不帶參數(shù)的啟動方式,另一種是帶參數(shù)的啟動的方式。 
不帶參數(shù)的啟動方式 
如果啟動參數(shù)時無需其它額外的信息,可以使用ThreadStart來實例化Thread,如下面的代碼: 

view plaincopy to clipboardprint? 
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 

namespace StartThread 

class Program 

int interval = 200; 
static void Main(string[] args) 

Program p = new Program(); 
Thread nonParameterThread = new Thread(new ThreadStart(p.NonParameterRun)); 
nonParameterThread.Start(); 

/// <summary> 
/// 不帶參數(shù)的啟動方法 
/// </summary> 
public void NonParameterRun() 

for (int i = 0; i < 10; i++) 

Console.WriteLine("系統(tǒng)當前時間毫秒值:"+DateTime.Now.Millisecond.ToString()); 
Thread.Sleep(interval);//讓線程暫停 



using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 

namespace StartThread 

class Program 

int interval = 200; 
static void Main(string[] args) 

Program p = new Program(); 
Thread nonParameterThread = new Thread(new ThreadStart(p.NonParameterRun)); 
nonParameterThread.Start(); 

/// <summary> 
/// 不帶參數(shù)的啟動方法 
/// </summary> 
public void NonParameterRun() 

for (int i = 0; i < 10; i++) 

Console.WriteLine("系統(tǒng)當前時間毫秒值:"+DateTime.Now.Millisecond.ToString()); 
Thread.Sleep(interval);//讓線程暫停 




程序的運行效果我們不用運行也會知道,那就是在循環(huán)中將系統(tǒng)當前時間的毫秒部分輸出出來,在每次輸出之后會將當前線程暫停一下,直到10次之后運行完畢,終止線程的執(zhí)行。 
在上面的代碼中我們是通過定義全局變量的方法來指定線程暫停間隔,按照這種方法,假如要運行10個線程,每個線程的暫停間隔不一樣的話,就需要定義10個全局變量,雖然最終不影響系統(tǒng)的運行效果,但是總覺得不是太爽。 
有沒有比較簡單一點的辦法呢?有!那就是使用帶參數(shù)的啟動方法。 
帶參數(shù)的啟動方法 
如果要在實例化線程時要帶一些參數(shù),就不能用ThreadStart委托作為構(gòu)造函數(shù)的參數(shù)來實例化Thread了,而要ParameterizedThreadStart委托,和ThreadStart一樣的是它也是線程啟動時要執(zhí)行的方法,和ThreadStart不同的是,它在實例化時可以用一個帶有一個Object參數(shù)的方法作為構(gòu)造函數(shù)的參數(shù),而實例化ThreadStart時所用到的方法是沒有參數(shù)的。 
為什么是Object這樣的參數(shù)呢?很簡單,因為在.net中Object是所有類型的基類,用它可以表示Array(數(shù)組)、Interface(接口)、ValueType(值類型,如bool,byte,char,short,int,float,long,double等)、class(類)等.net中的類型。當然,這也意味著如果你要啟動一個線程,給它傳遞一個int類型參數(shù)時,必須在啟動方法中進行相應(yīng)的類型轉(zhuǎn)換。 
下面就是一個例子,在啟動線程時指定了線程的暫停間隔,代碼如下: 

view plaincopy to clipboardprint? 
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 

namespace StartThread 

class Program 

int interval = 200; 
static void Main(string[] args) 

Program p = new Program(); 

Thread parameterThread = new Thread(new ParameterizedThreadStart(p.ParameterRun)); 
parameterThread.Name = "Thread A:"; 
parameterThread.Start(30); 


/// <summary> 
/// 帶參數(shù)的啟動方法 
/// </summary> 
/// <param name="ms">讓線程在運行過程中的休眠間隔</param> 
public void ParameterRun(object ms) 

int j = 10; 
int.TryParse(ms.ToString(), out j);//這里采用了TryParse方法,避免不能轉(zhuǎn)換時出現(xiàn)異常 
for (int i = 0; i < 10; i++) 

Console.WriteLine(Thread.CurrentThread.Name+"系統(tǒng)當前時間毫秒值:" + DateTime.Now.Millisecond.ToString()); 
Thread.Sleep(j);//讓線程暫停 




using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 

namespace StartThread 

class Program 

int interval = 200; 
static void Main(string[] args) 

Program p = new Program(); 

Thread parameterThread = new Thread(new ParameterizedThreadStart(p.ParameterRun)); 
parameterThread.Name = "Thread A:"; 
parameterThread.Start(30); 


/// <summary> 
/// 帶參數(shù)的啟動方法 
/// </summary> 
/// <param name="ms">讓線程在運行過程中的休眠間隔</param> 
public void ParameterRun(object ms) 

int j = 10; 
int.TryParse(ms.ToString(), out j);//這里采用了TryParse方法,避免不能轉(zhuǎn)換時出現(xiàn)異常 
for (int i = 0; i < 10; i++) 

Console.WriteLine(Thread.CurrentThread.Name+"系統(tǒng)當前時間毫秒值:" + DateTime.Now.Millisecond.ToString()); 
Thread.Sleep(j);//讓線程暫停

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多