问题:
在windows service程序中,定时器在运行一段时间后不工作
分析:
在查阅了大量的资料后,我们发现导致这个错误的原因是因为.NET Framework中System.Timers.Timer的bug导致的。以下是该BUG的简单信息:
BUG: The Elapsed event of the System.Timers.Timer class is not raised in a Windows service
Article ID |
: |
KB 842793 |
Last Review |
: |
July 27, 2004 |
Revision |
: |
1.0 |
SYMPTOMS
You can use the Microsoft .NET Framework to create a new Microsoft Windows service that contains a System.Timers.Timer object. When you run this new Windows service, the Elapsed event of the System.Timers.Timer class may not be raised.
CAUSE
Note In this section, the System.Timers.Timer object is referred to as the Timer object.
In the event handler for the Elapsed event of the Timer object, if you call the Stop method of the Timer object, the reference to the Timer object is lost. The garbage collector then reclaims the memory that is associated with the Timer object. Later, even if you call the Start method of the Timer object to raise the Elapsed event, the call does not work. The Elapsed event is not raised.
WORKAROUND
To work around this problem, use a System.Threading.Timer object instead of the System.Timers.Timer object.
STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section.
详见以下链接内容,http://support.microsoft.com/default.aspx?scid=kb;EN-US;842793 。
解决方案:
按照KB 842793的建议,用System.Threading.Timer替换System.Timers.Timer。
分享到:
相关推荐
在本文中,我们将深入探讨如何使用C#编程语言创建Windows服务,并结合System.Timers.Timer类实现定时任务。这个实例不仅提供了源代码,还通过截图帮助理解每个步骤,这对于初学者和开发者来说是一份宝贵的资源。 ...
System.Web.Extensions.dll 和 System.Web.Extensions.Design.dll 是两个关键的组件,它们在ASP.NET框架中扮演着重要的角色,特别是在实现AJAX(Asynchronous JavaScript and XML)功能时。这两个DLL文件是ASP.NET ...
在 IT 领域,Windows 服务(Windows Services)是后台运行的应用程序,它们为用户提供了一系列关键功能,如网络连接、打印服务等。与传统的应用程序不同,Windows 服务不提供用户界面,而是在后台静默运行。这种特性...
2. 配置服务:在Startup.cs文件的`ConfigureServices`方法中注册定时任务服务,如`services.AddHangfire(config => config.UseSqlServerStorage("connectionString"))`。 3. 注册作业:创建作业类,继承自IJob接口,...
在本文档中,柳永法提供了使用C#创建一个Windows服务的实战示例,该服务具有定时重启系统的功能。这个服务被命名为"CBDCN_reboot",它会在指定的时间点执行系统的重启操作。 首先,服务的核心类`Service1`继承自`...
在Windows操作系统中,Windows Service是一种后台应用程序,它不依赖用户界面,可以在系统启动时自动运行,执行特定的任务,如日志记录、系统监控等。本主题将深入探讨如何使用C#编程语言创建一个Windows Service,...
在Windows操作系统中,服务是一种特殊的后台程序,它们在用户登录之前就可以启动,并且通常不需要用户交互就能持续运行。"windows 服务 弹出界面 消息 提醒功能"的实现涉及了几个关键知识点,让我们逐一深入探讨。 ...
在IT领域,Windows服务(Windows Service)是一种在后台运行的应用程序,它不依赖于用户界面,可以在操作系统启动后自动执行任务。C#是.NET框架下的主要编程语言,它提供了丰富的库来创建和管理Windows服务。本篇...
8. 实现定时任务:Windows服务常用于执行定时任务,可以结合System.Timers.Timer或System.Threading.Timer实现周期性的操作。 9. 异步操作:由于服务可能需要长时间运行,应确保所有操作都在单独的线程上执行,以...
- 通常会在定时器的 `Elapsed` 事件处理程序中实现短信发送逻辑。 - **事件日志**: - 事件日志 `eventLog1` 可以用来记录服务启动、停止以及运行过程中发生的异常或重要事件。 - 通过 `WriteEntry` 方法向日志...
在Windows操作系统中,服务是一种特殊的后台应用程序,它们可以独立于用户会话运行,甚至在用户登录之前就开始工作。"Windows服务-根据需要启动某软件"的主题涉及到如何利用服务功能来自动化执行特定程序,特别是当...
Windows服务是一种在后台运行的独立进程,它可以不受用户登录状态的影响持续工作,这在需要定期执行某些任务或需要长时间运行的应用程序中非常有用。 首先,我们需要理解Windows服务的基本概念。在Windows操作系统...
在命令行中,运行`installutil.exe 你的服务exe文件名`即可安装服务,然后通过`services.msc`管理工具启动服务。 描述中提到的"服务安装自行百度.txt"可能是提供了一些关于如何安装和管理Windows服务的额外说明,这...
在IT行业中,Windows服务是一种特殊的后台应用程序,它可以在没有用户交互的情况下运行,为系统提供持续性的功能。在本实例中,我们关注的是如何利用C#语言来创建一个简单的Windows服务,该服务具备多线程处理数据的...
在IT行业中,Windows服务是一种特殊的后台应用程序,它可以在没有用户交互的情况下在Windows操作系统上运行。在C#编程语言中,我们可以利用.NET Framework提供的System.ServiceProcess命名空间来创建和管理Windows...
在代码中,我们可以使用`System.ServiceProcess`命名空间中的`ServiceBase`类作为服务的基础,并使用`System.Timers.Timer`类来实现定时功能。服务的`OnStart`方法中设置定时器,当定时器的`Elapsed`事件触发时,...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows应用程序和服务方面有着显著的应用。本文将详细讨论如何使用C#来实现一个程序启动监控服务,以确保指定的程序如果未运行,则能自动启动。 首先,我们...
14. **System.Timers**: 提供 `Timer` 类,用于在指定间隔触发事件,常用于定时任务。 15. **System.Web**: 包含ASP.NET相关的类,如 `Page` 和 `Control`,用于构建Web应用程序。 16. **System.Web.UI**: 提供ASP...
3. 为了注册服务以便在Windows服务管理控制台(Services.msc)中查看和管理,你需要添加`ProjectInstaller.cs`文件。在这个文件中,有两个重要的组件:`ServiceProcessInstaller`和`ServiceInstaller`,它们分别用于...