1

我有一个场景,我想跟踪我的控制台应用程序是活着还是死了(由于异常等)。

当控制台应用程序正在执行它的处理时,我希望有一个机制,它有一个计时器,它在每 N 分钟后继续调用一个报告方法,这个被调用的方法会更新数据库中的时间戳。

所以 :

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之前延迟的时间量。指定零会立即启动计时器。

第二个整数是period- 即回调方法调用之间的时间间隔。

您需要确保您的处理TimerTick时间少于您指定的时间段或确保它可重入 - 即它可以应对在前一次调用完成之前被调用的情况。你如何做到这一点 - 或者你是否可以做到这一点 - 取决于你的应用程序。

于 2012-12-27T17:07:26.597 回答