C#多線程啟動Square描述
學習C#語言時,經(jīng)常會遇到C#多線程啟動Square問題,這里將介紹C#多線程啟動Square問題的解決方法。
在實際工作中,還需要使用到C#多線程的許多復雜特性。其中一個問題就是如何將程序的數(shù)據(jù)由線程類的構(gòu)造器傳入或者傳出。對于放到另外一個線程中的過程,既不能傳參數(shù)給它,也不能由它返回值,因為傳入到線程構(gòu)造器的過程是不能擁有任何參數(shù)或者返回值的。為了解決這個問題,可以將過程封裝到一個類中,這樣,方法的參數(shù)就可使用類中的字段。
本文給出了一個簡單的例子,計算一個數(shù)的平方。為了在一個新的線程中使用這個過程,將它封裝到一個類中,在一個新的C#多線程啟動Square過程。
- public class SquareClass
 - {
 - publicdouble Value;
 - public double Square;
 - public void CalcSquare()
 - {
 - Square = Value * Value;
 - }
 - }
 - private void button1_Click(object sender, System.EventArgs e)
 - {
 - SquareClass oSquare =new SquareClass();
 - t2 = new Thread(new ThreadStart(oSquare.CalcSquare));
 - oSquare.Value = 30;
 - t2.Start();
 - }
 
在上述例子中,線程啟動后,并沒有檢查類中的square值,因為即使調(diào)用了線程的start方法,也不能確保其中的方法馬上執(zhí)行完。要從另一個線程中得到需要的值,有幾種方法,其中一種方法就是在線程完成的時候觸發(fā)一個事件。下面所示的代碼為SquareClass加入了事件聲明。
- public delegate void EventHandler(double sq);//說明委派類型
 - public class SquareClass
 - {
 - publicdouble Value;
 - public double Square;
 - public event EventHandler ThreadComplete;//說明事件對象
 - public void CalcSquare()
 - {
 - Square = Value * Value;
 - //指定事件處理程序
 - ThreadComplete+=new EventHandler(SquareEventHandler);
 - if( ThreadComplete!=null)ThreadComplete(Square);//觸發(fā)事件
 - }
 - public static void SquareEventHandler(doubleSquare )
 - //定義事件處理程序
 - {
 - MessageBox.Show(Square.ToString ());}
 - }
 
對于這種方法,要注意的是事件處理程序SquareEventHandler運行在產(chǎn)生該事件的線程t2中,而不是運行在窗體執(zhí)行的線程中。以上介紹C#多線程啟動Square。
【編輯推薦】















 
 
 

 
 
 
 