2012-03-01 7 views
-2

は、だから私はこのC#ランダムジェネレータをシードすると、プログラムが停止するのはなぜですか?

static Random random = new Random(DateTime.Now.Millisecond); 

ように私のクラスのいずれかに乱数発生器を宣言し、その関数が空白だった場合でも、クラス内の関数を呼び出すときに、実行されているから、全体のプログラムをブロックするように見えました。

static Random random = new Random(); 

しかし、これを実行すると、期待どおりに機能しましたか?コードと

EDIT:

このプログラムは、具体的にので、ここでXNAゲームは、更新機能

protected override void Update(GameTime gameTime) 
{ 
    Debug.WriteLine("This happenens"); 
    EnemyController.generateEnemies(); 
    Debug.WriteLine("This does not"); 
} 

されており、ここで述べたように、他のクラス

public static class EnemyController 
{ 
    static Random random = new Random(DateTime.Now.Millisecond); 

    public static void generateEnemies() 
    { 
     Debug.writeLine("This code wont run"); 
    } 
} 
+8

何かが続いています。デバッグ時に実行中に中断した場合、プログラムは何行停止しますか? – Oded

+2

これはおそらくここで重要ですが、あなたのプログラムはマルチスレッドですか? 'Random'はスレッドセーフではないので... –

+0

' Random'スレッドセーフな方法については、こちらをご覧ください:http://blogs.msdn.com/b/pfxteam/archive/2009/02/19/ 9434171.aspx –

答えて

3

の一部です。パラメータなしコンストラクタのSystem.RandomのMSDNドキュメント

時間依存のデフォルトのシード値を使用して、Randomクラスの新しいインスタンスを初期化します。

ランダムのインスタンシエーションが実際にコードをブロックしている場合は、時間とともにシードする必要はありません。しかし、私はあなたのコードブロックのための他の可能性を検討するでしょう。

関連する問題