winforms 无法每X秒生成两个随机数[duplicate]

qkf9rpyu  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(118)

此问题在此处已有答案

Random number generator only generating one random number(15个答案)
8天前关闭。
我需要在WinForms应用程序上每X秒生成两个随机数,但我无法做到。我的目标是每2-1秒生成两个数字,以便在WinForms中显示它们。我的代码工作的唯一方式是在生成两个随机数之前放置MessageBox.Show()。请像我五岁一样解释我为什么这样做。
我用我的代码尝试了什么:

public partial class FrmPrincipal : Form
    {
        private int temperatura = 0;
        private int umidade = 0;
        public FrmPrincipal()
        {
            InitializeComponent();
        }

        private void cadastrarNovoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmCadLote frmCadLote = new FrmCadLote();
            frmCadLote.ShowDialog();
        }

        private void atualizarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmAtualizacaoLote frmAtualizacaoLote = new FrmAtualizacaoLote();
            frmAtualizacaoLote.ShowDialog();
        }

        private void excluirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmExclusaoLote frmExclusaoLote = new FrmExclusaoLote();
            frmExclusaoLote.ShowDialog();
        }

        private void consultarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmConsultaLote frmConsultaLote = new FrmConsultaLote();
            frmConsultaLote.ShowDialog();
        }

        private void btnSensores_Click(object sender, EventArgs e)
        {
            ativaSensor();
        }

        public void ativaSensor()
        {
            Random rnd = new Random();
            Boolean sensorAtivo = false;
            if (!sensorAtivo)
            {
                // It only works when I enable this MessageBox
                MessageBox.Show("ok");
                this.temperatura = rnd.Next(0, 40);
                this.umidade = rnd.Next(0, 100);
                lblUmidade.Text = umidade.ToString();
                lblTemperatura.Text = temperatura.ToString();

                Thread.Sleep(1000);
                ativaSensor();
            }
        }
    }
qltillow

qltillow1#

正如Random类的文档中特别指出的那样,示例是使用种子值创建的,该种子默认为系统时间。如果您快速连续创建多个示例,它们可能会使用相同的种子,从而产生相同的伪随机数序列。
Random类的要点在于它使用特定的算法来生成一个数字序列。这意味着您应该重复使用一个示例,所以不要在一个将被多次调用的方法中创建一个示例。创建一个示例并将其赋给一个字段,然后一直使用该示例。如果您的目标是.NET 6或更高版本,您甚至可以使用Random.Shared属性来获取一个单例示例。

相关问题