如何在运行时更改标签值,每天每8小时使用计时器



你好,我有一个非常困难的时间试图改变一个标签的值在Winforms应用程序使用System.Windows.Forms.Timer我需要标签显示数字1从早上6点到下午2点。每天下午2点到10点坐2路车,晚上10点到早上6点坐3路车。这是我目前为止试过的。

我给我的表单添加了一个时钟,我把时钟的间隔改为28800000

InitializeComponent();
//8 Hour timer
Timer timer5 = new Timer();
timer5.Interval = 28800000; // 8 hours
timer5.Tick += new EventHandler(timer5_Tick);
timer5.Start(); 

在Timer tick上我添加了这个。

private void timer5_Tick(object sender, EventArgs e)
{
_ = DateTime.Now.Hour;
if (DateTime.Now.Hour >= 6 && DateTime.Now.Hour < 1400)
{
//First shift 06:00am through 2:00pm
LblShift.Text = "2";
}

if (DateTime.Now.Hour >= 1400 && DateTime.Now.Hour < 2200)
{
//Second shift 02:00pm through 10:00pm
LblShift.Text = "2";
}
if (DateTime.Now.Hour >= 2200 && DateTime.Now.Hour < 6)
{
//Second shift 02:00pm through 10:00pm
LblShift.Text = "3";
}
}

标签将改变当我第一次打开表单,但它将不再更新之后。我做错了什么?我将非常感谢任何帮助

长间隔计时器往往不太可靠。相反,将计时器设置为更短的间隔,例如一分钟,然后检查每个刻度上的时间(无论如何都要这样做),以知道要显示的值:

InitializeComponent();
Timer timer5 = new Timer();
timer5.Interval = 60*1000; // 60 seconds
timer5.Tick += new EventHandler(timer5_Tick);
timer5.Start();

我需要标签显示从早上6点到下午2点的数字1,从下午2点到晚上10点的数字2,从晚上10点到早上6点的数字3

如果我们按照一天的顺序(并包括两次第三班),我们可以简化此条件检查

private void timer5_Tick(object sender, EventArgs e)
{
var h = DateTime.Now.Hour;
if (h < 6) 
{
LblShift.Text = "3";
}
else if (h < 14)
{
LblShift.Text = "1";
}
else if (h < 22)
{
LblShift.Text = "2";
}
else
{
LblShift.Text = "3";
}
}

或为好玩:

private List<(int, int)> shiftHourMap = new List<(int, int)> {(6,3),(14,1),(22,2),(99,3)};
private int CurrentShift()
{
return shiftHourMap.First(m => DateTime.Now.Hour < m.Item1).Item2;
}
private void timer5_Tick(object sender, EventArgs e)
{    
lblShift.Text = CurrentShift().ToString();
}

最新更新