按固定间隔启动活动

时间:2012-12-27 17:03:15

标签: c# multithreading console-application

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

当控制台应用程序正在执行其处理时,我希望有一种机制,它有一个定时器,每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”分钟可能不再有效,因此有多可靠线程会按照自己的时间触发。

如何在处理过程中确保报告并行完成?

1 个答案:

答案 0 :(得分:6)

不是创建自己的线程,而是使用内置的Timer:

    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 page

第一个整数是在调用回调方法之前延迟的dueTime时间。指定零会立即启动计时器。

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

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