1

コンソール アプリケーションが生きているか死んでいるか (例外などにより) を追跡したいシナリオがあります。

コンソール アプリケーションが処理を実行している間、N 分ごとにレポート メソッドを呼び出し続けるタイマーを持つメカニズムが必要です。このメソッドが呼び出されると、DB のタイム スタンプが更新されます。

そう :

1 - Console application starts 
2 - Reports time stamp
3 - Keeps on doing its task (while in parallel it reports again after N seconds)

スレッドを生成してスリープ状態にし、「N」分後に再びウェイクアップできることはわかっていますが、リソースが解放されるまでスレッドが起動せず、「N」分が無効になる可能性があるため、スレッドが独自の時間に発火します。

処理中にレポートが並行して実行されるようにするにはどうすればよいですか?

4

1 に答える 1

6

独自のスレッドを作成するのではなく、組み込みのタイマーを使用します。

    private DateTime startTime;
    private System.Threading.Timer theTimer;

タイマーを開始します。

            this.startTime = DateTime.Now;
            TimerCallback callback = TimerTick;
            this.theTimer = new System.Threading.Timer(callback, null, 0, 1000);

コールバック メソッド:

    void TimerTick(object stateInfo)
    {
        TimeSpan currentTime = DateTime.Now - startTime;
        // Do your stuff here.
    }

これにより、毎秒起動する遅延のないタイマーが作成されます。

MSDN ページ

最初の整数は、コールバックメソッドが呼び出されるdueTimeまでの遅延時間です。ゼロを指定すると、タイマーがすぐに開始されます。

2 番目の整数は、コールバック メソッドperiodの呼び出し間の時間間隔です。

での処理にTimerTickかかる時間が指定した時間より短いことを確認するか、再入可能であることを確認する必要があります。つまり、前の呼び出しが完了する前に呼び出されても対処できるようにする必要があります。それをどのように行うか、または実際にそれを行うことができるかどうかは、アプリケーションによって異なります。

于 2012-12-27T17:07:26.597 に答える