将Timer设置为在两个间隔之间交替以生成随机数

时间:2013-02-24 19:59:54

标签: c#

我想在两个不同的文本框中显示两个不同的随机生成的数字。文本框中的数字每秒都会改变。我正在调用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#中生成随机数而不是基于系统时间,那也可以解决我的问题。

1 个答案:

答案 0 :(得分:1)

你应该让你的随机静态例如:

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

这样你只会创建一个Random-instance,并且在调用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();    
}

希望这会帮助你完成任务。