【问题标题】:Can I use Timer with no Timer Component?我可以使用没有定时器组件的定时器吗?
【发布时间】:2012-05-08 09:12:00
【问题描述】:

我正在使用一个 Windows 服务,它们很难测试,所以想尽可能将其留空,只导入类。

我需要使用 Timer 每 5 分钟触发一次事件,但如果我使用计时器组件,我必须将它放在我的 Windows 服务中。

那么是否可以构建我自己的基本计时器类??

我会怎么做呢?如果可能的话,我想变得非常小和轻,几行代码。

【问题讨论】:

  • Windows 服务应该不使用System.Windows.Forms.Timer 控件。
  • 酷好吧,所以我正在写关于在课堂上做这件事的事情?然后只使用类

标签: c# .net windows-services timer


【解决方案1】:

您可以使用System.Timers.Timer 或System.Threading.Timer

来自MSDN

// Create a timer with a ten second interval.
System.Timers.Timer aTimer = new System.Timers.Timer(10000);

// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

// Set the Interval to 2 seconds (2000 milliseconds).
aTimer.Interval = 2000;
aTimer.Enabled = true;

计时器已过事件处理程序

// Specify what you want to happen when the Elapsed event is 
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}

在这种情况下你不需要计时器组件

Here is the complete article on Timers in .Net。这里讨论了不同类型定时器之间的完整比较。

【讨论】:

  • 感谢我检查了 System.Timers.Timer 的链接所以这将在没有计时器组件的情况下工作,只需代码?
  • @Pomster 在这种情况下你不需要计时器组件
【解决方案2】:

您是否检查过 System.Threading.Timer 或 System.Timers.Timer ?这应该是您正在寻找的。​​p>

【讨论】:

  • 好的,我查找了 System.Timers.Timer,并阅读了第一个 google 搜索。现在这将在没有计时器组件的情况下工作??
【解决方案3】:

Thread.Sleep(1000*60*5); // 填充,因为我的答案太小而且太轻。

.. 或者,为了让它更“计时器”,请添加一个 for 循环:

for(;;){
  timerEvent();
  Thread.Sleep(1000*60*5);
};

【讨论】:

  • 好的,所以我添加了一个循环来调用一个事件。现在它看起来像一个计时器。
  • 除了外表可能是骗人的。 Thread.Sleep 是对整个线程的阻塞 调用。这与计时器完全不同。
  • 它体积小、重量轻、代码行数少,并且不需要任何代码或锁定来处理来自池线程或任何消息循环的信号即可工作。是的,它会阻止调用者,如果这是一个问题,最好不要使用它。
  • 我没有看到您的回答中提到的那些警告。问这个问题的人正在寻找一个计时器。该概念暗示了您的解决方案不满足的某些事情。也许您的解决方案也是可行的,但您需要明确它与计时器并不完全相同,以及它有何不同。
  • 只有一个警告,应该很明显。无论如何,计时器的定义是什么? Wiki 定义包含一个阻塞 sleep() 循环。我发现的另一个是“计时器是一个对象,可以在您的应用程序中使用,以使事件在指定的时间间隔内发生。”无论如何,替代方案是 System.Timers 或 Threading.Timers,两者都需要更多的代码行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多