简单地说,
我早上开始运行我的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;
}
}
答案 0 :(得分: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));
答案 1 :(得分:2)
您也可以使用Task Scheduler。
还有一个Timer课可以帮助你
答案 2 :(得分:0)
如果DateTime.Now ==(您想要的具体时间),您可以使用计时器检查每分钟
这是一个带窗体的代码示例
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; }
}
答案 3 :(得分:0)
您可以轻松实现自己的闹钟类。首先,您可能需要查看MS文章末尾的Alarm class。