以下代码段仅以灰度返回。我大部分时间都对此感到不安。有什么想法吗?
using System.Drawing;
private Graphics _g;
public Form1()
{
InitializeComponent();
_g = pictureBox1.CreateGraphics();
}
private void x()
{
System.Drawing.Rectangle r = CreateCircle(e);
SolidBrush brsh = ChooseFillColor();
_g.FillEllipse(brsh, r);
}
private SolidBrush ChooseFillColor()
{
return new SolidBrush(Color.FromArgb(RandomNumber(255), RandomNumber(255), RandomNumber(255)));
}
private int RandomNumber(int max)
{
Random random = new Random();
return random.Next(max);
}
答案 0 :(得分:4)
每次都初始化一个新的Random对象。由于它默认使用当前时间作为其种子,并且您调用它以使时间不会改变(在Windows上,计时器的准确度大约为15毫秒),您总是得到相同的随机数。而是在类中创建一个静态Random对象。
编辑:另外,考虑将RandomNumber方法设置为静态,或将其(与静态Random对象一起)放在静态类中。
答案 1 :(得分:2)
您对RandomNumber
的调用发生得如此之快,以至于RNG的播种次数相同,因此您为每次调用获得相同的整数...这意味着您的所有颜色都将具有相同的R ,G和B值(即灰度)。
将方法外的Random
对象移动到静态成员中:
static Random rng = new Random();
private int RandomNumber(int max)
{
return rng.Next(max);
}
答案 2 :(得分:1)
尝试将Random
的实例设为静态成员。在random.Next(...)
未返回预期值之前,我遇到了同样的问题,这解决了问题。