此问题在此处已有答案:
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();
}
}
}
1条答案
按热度按时间qltillow1#
正如
Random
类的文档中特别指出的那样,示例是使用种子值创建的,该种子默认为系统时间。如果您快速连续创建多个示例,它们可能会使用相同的种子,从而产生相同的伪随机数序列。Random
类的要点在于它使用特定的算法来生成一个数字序列。这意味着您应该重复使用一个示例,所以不要在一个将被多次调用的方法中创建一个示例。创建一个示例并将其赋给一个字段,然后一直使用该示例。如果您的目标是.NET 6或更高版本,您甚至可以使用Random.Shared
属性来获取一个单例示例。