以下のコードの概要:
メインプログラムが開始されると、第1のオブジェクトThreadSampleクラスを作成し、反復回数を提供します。その後、スレッドを開始するCountNumbersメソッドのオブジェクトを使用します。この方法は、別のスレッドで実行され、その数10で、番号は、着信オブジェクトThreadSampleコンストラクタです。そこで、我々はちょうど別のスレッドに反復回数を渡すことと同じ間接的な方法を使用します。
もう一つの方法は、データ伝送方法Thread.Startを使用することです。メソッドは、オブジェクト、スレッドに渡されたオブジェクトを受信します。この方法を適用するには、チェンZhongqi移動のオンライン方法は、Object型の単一のパラメータを受け入れる必要があります。threadTwoスレッドを作成するとき、それは道を示しています。8カウントの方法にオブジェクトとして渡され、この方法は整数に変換されたカウント。
次の方法は、ラムダ式を使用することです。ラムダ式はどのクラスに属していないメソッドを定義します。私たちは、別のメソッドを呼び出して、別のスレッドでメソッドを実行するために必要なパラメータを使用する方法を、作成しています。threadThreeスレッドを起動すると、私たちはラムダ式、図を通過するものである、12個の数字をプリントアウト。
ラムダ式C#のオブジェクト参照を使用して、別のアプローチが閉鎖と呼ばれています。ラムダ式で任意のローカル変数は、C#は、クラス、およびクラスのプロパティとして変数を生成しますとき。使用方法のthreadOneスレッドように、実際には同じですが、私たちはクラスを定義していない、C#コンパイラが自動的に達成するために私たちを助けます。
これにはいくつかの問題を引き起こす可能性があります。例えば、ラムダ式の複数の同じ可変場合、それらは可変値を共有します。前の例では、これを示しています。threadFourとthreadFiveスレッドを開始すると、これらの2つのスレッドが起動する前に、変数が20に変更されているので、彼らは、20を印刷します。
静的 ボイド数(オブジェクト反復) { CountNumbers((INT )反復)。 } 静的 ボイド CountNumbers(int型の反復) { ため(intは iは= 1 ; I <=反復; I ++ ) { のThread.sleep(TimeSpan.FromSeconds(0.5 ))。 Console.WriteLineを(" {0}印刷{1} " 、Thread.CurrentThread.Name、I)。 } } 静的の 無効PrintNumber(INTの数) { Console.WriteLineを(数) } クラスThreadSample { プライベート 読み取り専用 int型_iterations。 公共 ThreadSample(int型の反復) { _iterations = 反復。 } 公共 ボイドCountNumbers() { 用(INT iは= 1 ; I <= _iterations I ++ ) { のThread.sleep(TimeSpan.FromSeconds(0.5 ))。 Console.WriteLineを(" {0}印刷{1} " 、Thread.CurrentThread.Name、I)。 } } }
静的 ボイドメイン(文字列[]引数) {
//は、第1のオブジェクトクラスThreadSampleを作成し、反復回数提供 するvarサンプル= 新しい新しい ThreadSample(10 )
。(1)は、クラスの第一の実施形態を定義 /スレッド開始ThreadSample使用/オブジェクトCountNumbers方法
//を別のスレッドでこのメソッドを実行し、その数10で、番号は、着信オブジェクトThreadSampleコンストラクタで のvar = threadOne 新しい新しいスレッド(sample.CountNumbers); (私達反復の同じ数を間接的に別のスレッドに送信されることを除いて) threadOne.Name = 「ThreadOne 」; threadOne.Start(); threadOne.Join()。 Console.WriteLineを(" -------------------------- " );
(2)第二の実施形態:Thread.Startような方法を用いてフライヤーは、オブジェクトパラメータ、実施
//別の方法は、データ伝送方法Thread.Start使用することです(この方法のために、チェンZhongqi移動のオンラインメソッドはObject型の単一のパラメータを受け入れる必要があります) VAR threadTwo = 新しい新しいスレッド(カウントを) ; threadTwo.Name = " ThreadTwo " ; threadTwo.Start(8 )、 threadTwo.Join(); Console.WriteLineを(" ----------------------- --- 」);
(3)第三の方法:ラムダ式を使用。ラムダ式はどのクラスに属していないメソッドを定義します
//私たちは、別のメソッドを呼び出して、別のスレッドでメソッドを実行するために必要なパラメータを使用する方法、作成 するvarthreadThree =新しい新しいスレッドを(()=> CountNumbers(12;)) threadThree.Name=を"ThreadThree"; threadThree.Start(); threadThree.Join(); Console.WriteLineを("--------------------------"); int型= I10; VARthreadFour =新しい新しいスレッド(()=>PrintNumber(I)); 私=20であり、 VARthreadFive = 新しいスレッド(()=> PrintNumber(I)); threadFour.Start(); threadFive.Start(); Console.Read(); }
さて、ここで要約します。