0

我有一个小问题。没找到合适的标题,抱歉

我的数据库中有一个时间列,我想在任何时候做一些事情(不重要)currenttime==timeValueAtMyDatabase。如何?

if(currenttime==timeValueAtMyDatabase)
{
   //do something
}
4

3 回答 3

2

如果您对在不同线程中执行的代码感到满意,并且可以使用您想要的任何库(在本例中为 Rx),我个人更喜欢这种方法:

Observable.Timer(timeToDoTheThing).Subscribe(codeToRun);

timeToDoTheThing是代码应该执行codeToRun的时间,是到达时间时将运行的代码(以返回一个带长参数的 void 委托的形式)。

需要注意的一些事项:

  1. 如果提供的时间是过去的,该事件将立即发生。
  2. 该事件将在后台线程中执行。您可以通过提供调度程序来控制它在哪个线程中运行,但这有点复杂,我更喜欢让我的代码线程安全,而不是试图控制哪些线程执行哪些代码块。

下面是一个完整的程序来说明这一点。您需要将 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);
        }
    }
}
于 2013-10-19T22:31:02.330 回答
1

如果这是一个 Windows 窗体应用程序,您可以使用计时器并检查某些条目是否小于DateTime.Now.

如果是 Web 应用程序,则可以使用 cron 作业。查看以下链接:在 C# 中创建 Cron 作业

于 2013-10-19T22:03:41.997 回答
1

使用按适当间隔计时的计时器控件。在任何时候都将当前时间与数据库中的时间进行比较。您将需要考虑差异。例如,如果它在 0.1 秒、1.1 秒、2.1 秒处滴答作响,而您的数据库中的时间是 1 秒。您必须找到一种适当的方法来解释这些差异。

于 2013-10-19T22:06:12.757 回答