Как уже упоминали другие, случайный объект, создаваемый несколько раз в секунду, использует ту же секунду, что и начальное число, поэтому я бы поместил конструктор Random за пределы цикла и передал его в качестве параметра, например:
public static int RandomNumber(Random random, int min, int max)
{
return random.Next(min, max);
}
Также, как упоминалось другими, максимальное значение является эксклюзивным, поэтому, если вы хотите 0 или 1, вы должны использовать [0,2] в качестве [минимального, максимального] или некоторого большего максимального значения, а затем выполнить двоичное И с 1.
public static int RandomOneOrZero(Random random)
{
return random.Next(0, int.MaxValue) & 1;
}