ThreadStart:
ThreadStartのデリゲートはvoid ThreadStart()として定義されており、実行されるメソッドにはパラメータがありません。 ThreadStart threadStart=新しいThreadStart(計算); スレッド thread=新しいスレッド(threadStart); スレッド。 Start(); パブリック・ヴォイド Calculate() { 二重直径=0.5; Console.Write(「直径{0}の円の面積は{1}」直径、直径×数学・PI); } ここでは、ThreadStart型を定義するデリゲートを使い、スレッドが実行すべきメソッドを定義します:直径0.5の円周を計算し出力するCalculateです。 これはマルチスレッドの最も単純な例であり、多くの場合それで十分です
ParameterThreadStart: ParameterThreadStartはvoidのParameterizedThreadStart(オブジェクト状態)として定義されており、このデリゲートを使って定義されたスレッドの起動関数は、例えば以下の入力パラメータを受け入れることができます。
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(計算) スレッドスレッド=新しいスレッド() ; スレッド。 スタート(0.9); public void Calculate(object arg)
{ ダブル直径=ダブル(arg); Console.Write(「直径{0}の円の面積は{1}」直径、直径×数学・PI);
}
計算メソッドはパラメータ の 型 オブジェクトを持っていますが、パラメータは1つしかなく、これもオブジェクト型であり、使用時には変換が必要です。しかし幸いにもパラメータは存在し、複数のパラメータをクラスにまとめ、そのインスタンスをパラメータとして渡すことで、複数のパラメータ転送を実現できます。 たとえば:
クラスAddParams
{ パブリック・インテリットA、B;
public AddParams(int numb1, int numb2) { a = numb1; b = numb²; }
} #endregion
クラスプログラム
{ static void Main(string[] args) { Console.WriteLine("***** Threadオブジェクトで追加*****"); Console.WriteLine("Main(): {0} in thread in thread(): ", Thread.CurrentThread.ManagedThreadId);
AddParams ap = 新しいAddParams(10, 10); スレッド t = 新しいスレッド(new ParameterizedThreadStart(Add)); t.スタート(ap); Console.ReadLine(); }
#region 加算法 static void Add(オブジェクトデータ) { もし(データがAddParamsである場合) { Console.WriteLine("Main(): {0} in thread in thread(): ", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} is {2}", AP.A、AP.B、AP.A + AP.B); } } #endregion
}
} |