如何在WPF中随机化

本文关键字:随机化 WPF | 更新日期: 2023-09-27 18:15:40

你好,我是WPF的新手,我确实有一些ASP的经验。但这是全新的,标签我将做label.Content而不是label.Text,无论如何…我试图做一个简单的形式,在点击按钮,它显示5个不同的随机数..

当我逐行调试此代码时,它确实随机化并有一串不同的数字,但当我不调试并立即运行它并单击按钮时,它显示了所有相同的数字?,不知道为什么……理想情况下应该是

[1] [23] [45] [24] [34]

如果我调试并分步执行,它会给我这个结果但如果我不调试而只是运行程序,我得到

[23] [23] [23] [23] [23]

如有任何帮助,不胜感激

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int[] numbers = new int[5];
            StringBuilder sb = new StringBuilder();
            List<int> nums = new List<int>();
            foreach (int i in numbers)
            {
               int rand = RandomNumber(1,59);
               nums.Add(rand);
            }

            string numsList = string.Empty;
            foreach (int items in nums)
            {
                numsList += "[" + items.ToString() + "]";
            }
            lblNumber.Content = numsList.ToString();
        }
        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

    }
}

如何在WPF中随机化

您不应该每次都创建一个新的Random(将其改为只读字段)。当一个接一个地创建新实例时,种子可能总是相同的。它只能在调试模式下工作,因为当您逐步执行时,创建实例的速度会更慢。

MSDN:

默认情况下,Random类的无参数构造函数使用系统时钟来生成它的种子值,而它的参数化构造函数可以根据当前时间的滴答数取一个Int32值。然而,由于时钟具有有限的分辨率,使用无参数构造函数创建紧密连续的不同Random对象会创建产生相同随机数序列的随机数生成器。