在C#中快速生成随机数

bio*_*ion 2 c# random

我正在创建一个程序,它创建了几个具有随机确定颜色的面板,这些面板将每20毫秒左右递增/递减一些随机常量,以创建平滑,起伏的颜色.为此,我刚刚使用Random类的Next(int)方法.对于单个实例,这非常有效 - 每次运行程序时,我都会以不同的速率变换不同的颜色.当我尝试创建多个面板时出现问题 - 大多数(如果不是全部)面板出现并且彼此表现相同,这意味着所有随机生成的数字都是相同的.我假设这是快速连续生成所有伪随机数的结果,导致所有伪随机数基于相同的种子.

有没有比使用Random类快速连续生成随机整数以确保它们不相同的更好的方法?如果没有任何方法已经内置到C#中,是否有任何直接的方法来开发伪随机数生成器(请记住,这是我第一次尝试使用C#)?

Sco*_*ain 5

不要使用默认构造函数使用Random Class的多个实例.如果它们都在同一时间片内初始化,它们将具有相同的种子,并且将生成相同的随机数序列,使用可以传入种子的构造函数并将不同的种子传递给每个实例.

Random rand0, rand1, rand2;

void init()
{
      int baseSeed = (int) DateTime.Now.Ticks;
      rand0 = new Random(baseSeed);
      rand1 = new Random(baseSeed + 1);
      rand2 = new Random(baseSeed + 2);
}
Run Code Online (Sandbox Code Playgroud)

此外,每个线程只需要一个对象,如果所有面板都在同一个线程上,则对所有面板使用相同的Random对象.