1

我想在两个不同的文本框中显示两个不同的随机生成的数字。文本框中的数字每秒都在变化。我正在调用 System.Random 来创建随机数:

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

我遇到的问题是 System.Random 根据系统时间生成数字,因此文本框每秒生成两个相同的随机数。我试图通过将数字的生成错开 20 毫秒来解决这个问题。为此,我创建了两个不同的计时器(每个文本框一个),它们以 980 和 1020 毫秒的间隔交替:

    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;


    }

但是,这不会同步计时器。我希望它们每 1000 毫秒同时打勾。我认为(如果我错了,请纠正我)我将间隔设置在错误的位置,并且我在每个计时器中设置的两个间隔中只有一个实际上被计算在内。

如果有更好的方法在 c# 中生成随机数而不是基于系统时间,那也可以解决我的问题。

4

1 回答 1

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();    
}

希望这对您的探索有所帮助。

于 2013-02-24T20:01:50.147 回答