Random r = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
Thread.Sleep(20); // Apply an algorithm to differentiate the seed value in each invocation, or call the Thread.Sleep method to ensure that you provide each constructor with a different seed value.
int iSelect3 = r.Next(0, 35);
textBox3.Text = strLabel3[iSelect3];
は、乱数の同一の配列を生成するために各インスタンスを引き起こします。これは、乱数ジェネレータに依存するアプリをテストするときによく行われます。 アプリケーションで異なる乱数シーケンスが必要な場合は、このコンストラクタを異なるシード値で繰り返し呼び出します。ユニークなシード値を生成する1つの方法は、シード値を時間に依存させることです。たとえば、Random()オーバーロードが行うように、シード値をシステムクロックから派生させます。ただし、このコンストラクタを異なるシード値で別々に呼び出すには、システムクロックで十分な解像度が得られないことがあります。これにより、次の例の最初の2つのRandomオブジェクトで示されるように、擬似乱数の同じシーケンスを生成する乱数ジェネレータが生成されます。これを防ぐには、各呼び出しでシード値を区別するアルゴリズムを適用するか、Thread.Sleepメソッドを呼び出して、各コンストラクターに異なるシード値を指定するようにします。
あなたはMSDN
に
ランダムクラスについての詳細を学ぶことができます