关于cmets:
Thread.Sleep() 的使用只是一个示例,用于在闭环中测试 Random 类的本地实例的结果。
您可能会得到一系列相同的结果。或所有相同的值。
在这里,作为测试,我在返回随机颜色时插入了一个小暂停 (1ms),因此每次(几乎)都会使用不同的种子来选择颜色。测试一下,不要停顿。
使用 Random 类的单个实例的默认实现可以产生类似的结果。
private Color[] Colors = { Color.Red, Color.Yellow, Color.Green};
private Color GetColor()
{
Random random = new Random(DateTime.Now.Millisecond);
Thread.Sleep(1);
return Colors[random.Next(0,3)];
}
在没有Thread.Sleep() 暂停的情况下进行测试:
for (int i = 0; i < 100; i++)
{
Console.WriteLine(GetColor().Name);
}
或者,更准确地说,使用静态字段:
private static Random random = new Random();
private Color GetColor()
{
return Colors[random.Next(0,3)];
}
为每个元素获取不同深浅的Red、Green 和Yellow 的方法略有不同:
(可能应该稍微调整一下以避免半灰色)。
private Color GetColor2()
{
Color color = Colors[random.Next(0, 3)];
switch (color.Name)
{
case "Yellow":
color = Color.FromArgb((160 + random.Next(0, 96)), (160 + random.Next(0, 96)), 0);
break;
case "Red":
color = Color.FromArgb((160 + random.Next(0, 96)), 0, 0);
break;
case "Green":
color = Color.FromArgb(0, (160 + random.Next(0, 96)), 0);
break;
}
return color;
}
这是此方法生成的随机调色板: