0

少し問題があります。適切なタイトルが見つかりませんでした、申し訳ありません

データベースに時間列があり、いつでも何か(重要ではない)をしたいcurrenttime==timeValueAtMyDatabase. どのように?

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

3 に答える 3

2

別のスレッドで実行されているコードに問題がなく、必要なライブラリ (この場合は Rx) を使用できる場合は、個人的には次の方法をお勧めします。

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

timeToDoTheThingcodeToRunコードを実行する時刻であり、その時刻に達したときに実行されるコードです (1 つの長いパラメーターを受け取る 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 に答える