我有一个小问题。没找到合适的标题,抱歉
我的数据库中有一个时间列,我想在任何时候做一些事情(不重要)currenttime==timeValueAtMyDatabase
。如何?
if(currenttime==timeValueAtMyDatabase)
{
//do something
}
如果您对在不同线程中执行的代码感到满意,并且可以使用您想要的任何库(在本例中为 Rx),我个人更喜欢这种方法:
Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);
timeToDoTheThing
是代码应该执行codeToRun
的时间,是到达时间时将运行的代码(以返回一个带长参数的 void 委托的形式)。
需要注意的一些事项:
下面是一个完整的程序来说明这一点。您需要将 Rx-Main NuGet 包安装到项目中,以便它能够针对 .NET 4+ 工作和构建。
using System;
using System.Reactive.Linq;
using System.Threading;
namespace Test
{
public class Class
{
public static void Main()
{
var timeToDoTheThing = new DateTimeOffset(2013, 10, 19, 22, 19, 30, TimeSpan.Zero);
Action<long> codeToRun = _ => Console.WriteLine("It is time.");
Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);
Thread.Sleep(100000);
}
}
}
如果这是一个 Windows 窗体应用程序,您可以使用计时器并检查某些条目是否小于DateTime.Now
.
如果是 Web 应用程序,则可以使用 cron 作业。查看以下链接:在 C# 中创建 Cron 作业。
使用按适当间隔计时的计时器控件。在任何时候都将当前时间与数据库中的时间进行比较。您将需要考虑差异。例如,如果它在 0.1 秒、1.1 秒、2.1 秒处滴答作响,而您的数据库中的时间是 1 秒。您必须找到一种适当的方法来解释这些差异。