1

简而言之,

我早上开始运行我的 C# 程序,该程序应该在下午 5:45 向用户显示一条消息。我怎样才能在 C# 中做到这一点?

编辑:我问了这个问题,因为我认为使用计时器不是最好的解决方案(定期比较当前时间与我需要运行任务的时间):

private void timerDoWork_Tick(object sender, EventArgs e)
{
    if (DateTime.Now >= _timeToDoWork)
    {

        MessageBox.Show("Time to go home!");
        timerDoWork.Enabled = false;

    }
}
4

4 回答 4

5

我问了这个问题,因为我认为使用计时器不是最好的解决方案(定期比较当前时间与我需要运行任务的时间)

为什么?为什么不定时最好的解决方案?IMO 计时器是最好的解决方案。但不是您实施的方式。试试下面的。

private System.Threading.Timer timer;
private void SetUpTimer(TimeSpan alertTime)
{
     DateTime current = DateTime.Now;
     TimeSpan timeToGo = alertTime - current.TimeOfDay;
     if (timeToGo < TimeSpan.Zero)
     {
        return;//time already passed
     }
     this.timer = new System.Threading.Timer(x =>
     {
         this.ShowMessageToUser();
     }, null, timeToGo, Timeout.InfiniteTimeSpan);
}

private void ShowMessageToUser()
{
    if (this.InvokeRequired)
    {
        this.Invoke(new MethodInvoker(this.ShowMessageToUser));
    }
    else
    {
        MessageBox.Show("Your message");
    }
}

像这样使用它

 SetUpTimer(new TimeSpan(17, 45, 00));
于 2013-08-16T09:35:32.677 回答
2

您也可以使用任务计划程序

还有一个Timer类可以帮助你

于 2013-08-16T09:03:59.723 回答
0

您可以轻松实现自己的警报类。首先,您可能需要查看MS 文章末尾的Alarm 类。

于 2013-08-16T09:12:20.617 回答
0

如果 DateTime.Now == (您想要的具体时间),您可以使用 Timer 检查每一分钟

这是一个带有 windows 窗体的代码示例

public MainWindow()
    {
        InitializeComponent();
        System.Windows.Threading.DispatcherTimer timer_1 = new System.Windows.Threading.DispatcherTimer();
        timer_1.Interval = new TimeSpan(0, 1, 0);
        timer_1.Tick += new EventHandler(timer_1_Tick);
        Form1 alert = new Form1();
    }
    List<Alarm> alarms = new List<Alarm>();

    public struct Alarm
    {
        public DateTime alarm_time;
        public string message;
    }


    public void timer_1_Tick(object sender, EventArgs e)
    {
        foreach (Alarm i in alarms) if (DateTime.Now > i.alarm_time) { Form1.Show(); Form1.label1.Text = i.message; }
    }
于 2013-08-16T09:05:03.910 回答