2013-02-24 96 views
1

我想在兩個不同的文本框中顯示兩個不同的隨機生成的數字。文本框中的數字每秒都在變化。我調用System.Random創建隨機數:設置定時器在兩個間隔之間交替以產生隨機數

private int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

我遇到的問題是,System.Random生成基於系統時間的數字,所以文本框生成兩個相同的隨機數的每一秒勾號。我曾試圖通過將這些數字的生成量錯開20毫秒來解決這個問題。

private void timer1_Tick(object sender, EventArgs e) 
    { 
     int xgpscoord; 

     timer1.Interval = 980; 
     xgpscoord = RandomNumber(10000, 90000); 
     textBoxGPSx.Text = xgpscoord.ToString(); 
     timer1.Interval = 1020; 


    } 

    private void timer2_Tick(object sender, EventArgs e) 
    { 

     int ygpscoord; 

     timer2.Interval = 1020; 
     ygpscoord = RandomNumber(10000, 90000); 
     textBoxGPSy.Text = ygpscoord.ToString(); 
     timer2.Interval = 980; 


    } 

然而,這並不同步計時器:我已經創建了兩個不同的定時器(每個文本框)980個1020毫秒的間隔之間交替做到了這一點。我希望他們每1000毫秒同時打勾。我認爲(如果我錯了,請糾正我)我將錯誤的時間間隔設置在錯誤的位置,並且只有在每個計時器中設置的兩個間隔中的一個實際上正在計數。

如果有更好的方式在c#中生成隨機數字,而不是基於系統時間,那也可以解決我的問題。

回答

1

你應該讓你的隨機靜如:

private static Random random = new Random(); 
private int RandomNumber(int min, int max) 
{ 
    return random.Next(min, max); 
} 

這樣,你只會創建一個隨機的實例,你就會不斷的打電話RandomNumber當創建新的隨機數。

關於間隔,就應該開始(例如類的構造函數)

public Form1() 
{ 
    InitializeComponent(); 
    timer1.Interval = 1000; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    textBoxGPSx.Text = RandomNumber(10000, 90000).ToString(); 
    textBoxGPSy.Text = RandomNumber(10000, 90000).ToString();  
} 

希望這將幫助你在你的追求設置。

+0

這解決了我的問題。謝謝! 爲什麼設置Random來靜態修復我的問題?如果System.Random根據系統時間生成數字,那麼我生成的兩個數字不應該相同嗎?我在這方面有點新手,不明白爲什麼只創建Random的一個實例並在同一時間調用兩次實現了數字生成的區分。如果可能,請詳細說明。 – Conor 2013-02-24 20:22:48

+0

Random的默認構造函數根據系統時間設置種子。每次生成一個隨機數時,種子就會變成別的東西(基於公式),並返回一個隨機數(基於種子值的其他公式)。您可以在http://en.wikipedia上閱讀更多內容。 org/wiki/Random_number_generation,如果你想的話。 – Casperah 2013-02-25 17:32:09

相關問題