报警定时器

时间:2012-02-10 19:50:02

标签: c# timer

我想创建一个简单的程序,使其在特定时间运行。这是我的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Alarm ft = new Alarm(dateTimePicker1.Value);
    }
}

public class Alarm
{
    public Timer reminder = new Timer();
    public DateTime RemindAt;

    public Alarm(DateTime time)
    {
        RemindAt = time;

        reminder.Interval = (int)(RemindAt - DateTime.Now).TotalMilliseconds;
        reminder.Start();
        reminder.Tick += new EventHandler(reminder_Tick);
    }

    void reminder_Tick(object sender, EventArgs e)
    {
        if (RemindAt <= DateTime.Now)
        {
            reminder.Dispose();
            MessageBox.Show("W: " + RemindAt.ToString("dd MMMM yyyy, HH:mm:ss") + "\n" + "N: " + DateTime.Now.ToString("dd MMMM yyyy, HH:mm:ss") + "\n\n");
        }
    }

你似乎可以使用计时器,但看起来非常不准确,我不明白为什么。以下是6个警报的屏幕截图:http://i.imgur.com/ipW7H.png

其中一半是错的。 W代表它应该工作,N代表现在。有时差异可能很大,为什么呢?如何解决这个问题,或者有更好的方法来制作简单的警报?

2 个答案:

答案 0 :(得分:1)

System.Windows.Forms.Timer不准确,特别是对于大数字。不要计算Interval的值,而是将其设置为常量,例如1000

答案 1 :(得分:0)

查看Windows Task Schedular

基本上创建您的EXE并让Windows处理运行时间。

How to do it via UI

Install it Programmatically