我有一个称为nud的numericUpDown。
nud = 0.5,最小0.5,最大6和增量0.5。
这是我的例程要执行的时间间隔。
如果nud == 0.5,则我的例程每30分钟运行一次;如果nud == 1,则每1小时运行一次; nud == 1.5,每1小时30分钟(90分钟)运行一次,依此类推。
但是,如果nud nud == 0.5 || 1.5 || 2.5 || 3.5 || 4.5 || 5.5,则应在系统时钟类似于以下HH:00:00或HH:30:00时触发例程。半小时)
如果nud == 1 || 2 || 3 || 4 || 5 || 6,则应在系统时钟为HH:00:00(整小时)时触发例程。
每个技巧,想法,链接都是值得欢迎的。
提前致谢,
占用
最佳答案
我〜想〜你想要这样的东西:
public partial class Form1 : Form
{
private DateTime dt;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SetInitialTimer();
}
private void SetInitialTimer()
{
// Set "dt" to the BEGINNING of the CURRENT hour:
dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0);
switch (nud.Value.ToString())
{
case "0.5":
case "1.5":
case "2.5":
case "3.5":
case "4.5":
case "5.5":
// start at the NEXT 1/2 hour or top of the hour:
if (DateTime.Now.Minute < 30)
{
dt = dt.AddMinutes(30);
}
else
{
dt = dt.AddHours(1);
}
break;
default: // "1", "2", "3", "4", "5", "6"
// start at the TOP of the NEXT hour:
dt = dt.AddHours(1);
break;
}
timer1.Interval = (int)dt.Subtract(DateTime.Now).TotalMilliseconds;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
// ... do something in here ...
SetRecurringTimer();
}
private void SetRecurringTimer()
{
dt = dt.AddMinutes((double)(nud.Value * (decimal)60));
timer1.Interval = (int)dt.Subtract(DateTime.Now).TotalMilliseconds;
timer1.Start();
}
}
关于c# - C#常规点火,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16369016/