我有一个称为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/

10-10 12:32