如何创建一个真正的随机'带定时器控制?

时间:2015-03-28 20:20:31

标签: c# random timer

我有一个点击按钮的计时器,无论计时器处于什么速度,由于Random与时钟有某种关联,无论速度如何,结果都是可预测的。< / p>

我一直在阅读并了解到,当初始化新的Random时,系统时间会这样做,这就解释了为什么我会遇到这个问题。

以下是我所拥有的:

   int win = 0;
   int lose = 0;

    private void button1_Click(object sender, EventArgs e)
    {
        Random rn = new Random();
        int rnu = rn.Next(2);

        if (rnu == 0)
            win++;

        if (rnu == 1)
            lose++;

          string winmsg = "Wins: " + win.ToString();
          string losemsg = "Losses: " + lose.ToString();

        winlbl.Text = winmsg;
        loselbl.Text = losemsg;

        timer1.Start();

    }

然后是计时器:

    private void timer1_Tick(object sender, EventArgs e)
    {
        button1.PerformClick(); //interval 500, but always predictable.
    }

我的目标是尝试创建一个更多随机的&#39;结果 - 用计时器控制无法预测的结果。但是,我无法修改计时器的速度;它必须保持循环不变。

我已经尝试停止计时器并重新启动,但即使这样,它也会继续执行可预测的行为。

是否有人知道如何绕过这种或某种“诡计”?或者这是一些C#Random限制?

1 个答案:

答案 0 :(得分:2)

  

我一直在阅读并了解到,当初始化一个新的随机数时,它会在系统时间内完成,这就解释了为什么我会遇到这个问题。

然后将Random移到方法之外,不要重新初始化它。

Random rn = new Random(); 

private void button1_Click(object sender, EventArgs e)
{

Random类的要点是你不应该在程序周围有太多实例,这完全是因为它们可以同时初始化。对于每个线程(您使用它),完美的数字就是一个。 Winforms事件都在主线程中运行。