О комментариях:
Использование Thread.Sleep()
является лишь примером для проверки результатов локального экземпляра класса Random
при использовании в замкнутом цикле.
Возможно, вы получите серию с одинаковым результатом. Или все одинаковые значения.
Здесь, в качестве теста, я вставляю небольшую паузу (1 мс) при возврате случайного цвета, чтобы цвета каждый раз выбирались с использованием нового семени (почти). Проверьте это без паузы.
Реализация по умолчанию, использующая один экземпляр класса 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 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;
}
Это случайная палитра, которую генерирует этот метод: