【发布时间】:2010-02-11 09:36:17
【问题描述】:
我是 Windows 服务的新手,所以请原谅这篇文章的基本性质。
我的任务是更新现有服务,并且对它们如何工作以及如何在后台继续运行有一些疑问。我假设某种循环通常在起作用,但在下面的情况下,我不确定它是如何工作的,以及为什么它不会在短时间内停止。
简而言之,此服务在其 InitializeComponent() 部分创建一个 System.IO.FileSystemWatcher 对象,并为其 Created 事件建立一个事件处理程序。
在服务的 OnStart 方法()中,创建并启动了一个线程。该线程循环并指示 FileSystemWatcher 对象查看特定目录,并为 FileSystemWatcher 建立各种设置和选项。无论如何,这不是一个无限的 while() 循环;它会做一些涉及用户提供的超时值和睡眠等待时间的数学运算,但在每种情况下它最终都会退出。
上面提到的 FileSystemWatcher 事件处理程序依次将触发事件的新创建文件放入线程安全队列,然后创建一个新线程或使用现有线程来处理排队的文件。队列处理代码使用循环来检查队列并从中删除任何项目并处理它们。当队列中没有项目时,while循环结束,方法退出。
这些文件创建的事件很少而且相差甚远,所以我看不出任何一个循环会如此繁忙以至于一直保持运行。按照这种逻辑,服务应该停止,或者我认为。但它永远不会,它总是在运行。
在 Windows 服务中是否存在一些不可见的消息泵,使其一直运行直到触发 OnStop 或暂停事件?
我希望这是有道理的,如果我的描述没有,我深表歉意。如果您认为这可能会有所帮助,我很乐意进一步详细说明。感谢您在这里的解释。
【问题讨论】:
标签: .net windows-services