c#wpf日期时间更改(新的一天已经到来)事件
大家好,我试着做一些类似的事情来创建事件,当新的日期到来时开始做一些事情,比如2014/01/01和2014/01/02,然后做一些事情:c#wpf日期时间更改(新的一天已经到来)事件,c#,wpf,C#,Wpf,大家好,我试着做一些类似的事情来创建事件,当新的日期到来时开始做一些事情,比如2014/01/01和2014/01/02,然后做一些事情: private void Datetime.now_changed(days)(object sender, RoutedEventArgs e) { do some stuff; } 我该怎么办?您可以创建一个类来检查日期变化: using System; using System.Timers; public
private void Datetime.now_changed(days)(object sender, RoutedEventArgs e)
{
do some stuff;
}
我该怎么办?您可以创建一个类来检查日期变化:
using System;
using System.Timers;
public class Clock
{
private readonly Timer _timer = new Timer(1000);
private DateTime _yesturday = DateTime.Today;
public event EventHandler NewDay;
public Clock()
{
_timer.Elapsed += Timer_Elapsed;
_timer.Start();
}
void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (_yesturday != DateTime.Today)
{
if (NewDay != null) NewDay(this, EventArgs.Empty);
_yesturday = DateTime.Today;
}
}
}
现在我们可以使用:
private void button1_Click(object sender, EventArgs e)
{
var c = new Clock();
c.NewDay += OnNewDay;
}
private void OnNewDay(object sender, EventArgs e)
{
// new day comes
}
创建一个计划的任务可能是你最好的行动方式。如果不是的话,你可以(理论上)将类设置为00:00之前的任何时间。通常,它在较短的时间跨度上是有意义的,比如“每10秒”,而不是“每24小时”
现在,问题是,您要么有一个长时间(持续)运行的应用程序,要么只有一些代码每24小时执行一次。在第二种情况下,您最好使用调度程序。对于长时间运行的应用程序,我假设它除了每天24小时等待之外,实际上还做了一些事情,然后您可以使用计时器,或者使用某种方式利用调度程序(比如通过WCF-google:.net中的进程间通信,或者仅仅通过filesystem watcher?您的问题完全不清楚。您想做什么?为什么不在Windows中添加一个每天运行一次的计划任务呢?这是一个很好的解决方案,但存在一个bug。您需要在发布事件之前停止计时器,并在重新分配新的日期之后再次启动计时器。原因是,如果事件接收器调用运行时间超过1秒的函数,它将得到一个双事件。停止和启动将消除这种可能性。另外,既然这是一个WPF线程,为什么不使用Dispatcher来代替呢?普通计时器在与UI不同的线程上发送事件。如果改用Dispatcher,则偶数位于UI线程上,因此事件接收器可以更新UI组件,而无需先进行调用。只是一个建议。