用于备份的计时器线程

时间:2013-08-15 10:45:47

标签: c# vb.net timer countdowntimer

如果我想在5分钟的间隔内将某些东西保存到我的数据库中,并且我决定使用一个单独的线程(如果有更好的方法 - 启发我),那么会更好:

  • 只需创建线程并保持睡眠状态5分钟,然后调用保存功能,然后再次睡眠。 OR

  • 使用Timer类(我没有仔细检查过)并使用它进行一些倒计时,如果可能的话,在结束时 - 调用Save函数 - 然后启动再次倒计时。 OR

  • 其他一些方式

P.S。如果您愿意,可以提供代码示例。

1 个答案:

答案 0 :(得分:0)

我建议使用System.Threading.Timer

向您的班级添加System.Threading.Timer类型的字段:

private System.Threading.Timer _timer;

然后在类的构造函数中初始化它:

_timer = new Timer
(
    onSave, 
    null,  // State; not used.
    TimeSpan.FromMinutes(5),
    TimeSpan.FromMinutes(5)
);

然后添加onSave()并将保存逻辑放入其中:

private void onSave(object state)
{
    // Handle your save here.
}

您不希望每五分钟为一次回调刻录整个线程。

使用计时器的另一个好处是,当程序想要关闭时(或出于任何其他原因),它可以更容易地取消它。如果你有一个线程坐在Sleep()中,那么取消Sleep()就不容易了!

要停止计时器运行,您只需执行以下操作:

_timer.Change(-1, -1);

重新开始:

_timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));

查看the documentation for System.Threading.Timer了解详情。

要注意的一件事是,onSave()的呼叫是否需要比定时器时间更长的时间。在这种情况下,您可能希望在onSave()的开头禁用计时器(通过调用_timer.Change(-1, -1);)并在结束时重新启用计时器。