【发布时间】:2012-02-09 18:12:56
【问题描述】:
我最近遇到了编写 Windows 服务的挑战。我需要定期请求一个 URL 并检查它的可用性。为此,我决定在服务的OnStart 方法中初始化一个计时器,并在timer_Tick 事件中完成所有工作。
我的第一种方法是使用System.Windows.Forms.Timer 及其Tick 事件。我选择了它,因为我正在阅读教程。不知何故,我无法使服务工作。它安装并启动没有问题,但它不会触发事件(我将调试器附加到进程并看到它没有被触发)。我认为在 Windows 服务中使用 Forms 计时器可能不是一个好主意,所以我决定切换到 System.Timers.Timer 并利用它的 Elapsed 事件。这也不起作用。我在 Windows 窗体应用程序中尝试了上述两种方法,它们都有效。
经过一番挖掘,我找到了这个网站:http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx,博主建议在该网站上使用另一个计时器:System.Threading.Timer。我第三次改变了方法,BOOM 它开始像魅力一样发挥作用。
我的问题是:为什么我不能使用 Windows 服务中的其他计时器?为什么很难找到有关它的信息?
【问题讨论】:
-
我现在发现这篇文章比较了不同的 .NET 计时器。绝对值得一读:msdn.microsoft.com/en-us/magazine/cc164015.aspx
-
System.Threading.Timer是唯一一个在Windows Server 2008 R2中为我工作的,虽然 Timers.Timer 在我的Windows 7 laptop中工作。
标签: .net windows-services timer