C# 服务停止而不停止()
我有一个在OnStart中创建FileSystemWatcher的服务,我希望该服务仅在创建文件后结束 所以我有这个密码C# 服务停止而不停止(),c#,service,C#,Service,我有一个在OnStart中创建FileSystemWatcher的服务,我希望该服务仅在创建文件后结束 所以我有这个密码 protected void OnStart() { try { using (FileSystemWatcher watcher = new FileSystemWatcher()) { watcher.P
protected void OnStart()
{
try
{
using (FileSystemWatcher watcher = new FileSystemWatcher())
{
watcher.Path = WatchPath;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.txt";
watcher.IncludeSubdirectories = false;
watcher.Changed += OnCreated;
watcher.EnableRaisingEvents = true;
logEvents.Write(MyLogClass.LogLevel.Info, "Watcher created");
}
}
catch (Exception ex)
{
logEvents.Write(MyLogClass.LogLevel.Info, ex.Message);
}
if (finished)
{
OnStop();
}
}
bool finished仅在OnCreated的最后一行中设置为true
private void OnCreated(object sender, FileSystemEventArgs e)
{
//Here I do all the stuff I need and then:
finished = true;
}
但即使未执行OnCreated,服务也会结束,我会得到:
程序-已退出,代码为0 0x0
我试着在代码的不同部分调用OnStop,但同样的事情无论如何都会发生。我希望服务在创建给定文件之前保持静止,并在完成oncreate后重新启动,但我不知道这有什么问题。您的代码执行一次,然后结束 您需要在主代码周围设置一个带有睡眠计时器的循环,以使其保持活动状态。并在这里嵌入您的支票完成 编辑: 如评论中所述。
我错过了你在OnStart做这件事。不应在此处执行循环,否则windows会认为您的服务无法启动。因此,您还需要重构它。您的代码执行一次,然后结束 您需要在主代码周围设置一个带有睡眠计时器的循环,以使其保持活动状态。并在这里嵌入您的支票完成 编辑: 如评论中所述。 我错过了你在OnStart做这件事。不应在此处执行循环,否则windows会认为您的服务无法启动。因此,您还需要对其进行重构。一个FileSystemWatcher本身不足以保持进程运行。当没有事件被服务时,就不需要线程,即使需要一个线程,它也将是一个后台线程 流程需要保持运行的是。该线程正在做什么并不重要,只要至少存在一个线程 对于这样一个线程,您似乎没有任何有用的工作要做——但您需要一个。我建议您创建一个线程,只需等待设置。然后使用该变量而不是finished变量来指示何时关闭服务 此时,前景线程退出,没有前景线程留下,进程关闭,服务停止 请注意,您必须为此等待的工作创建一个新线程。调用OnStart和OnStop的线程不属于您。它是一个为服务控制管理器提供服务的线程,您需要让它这样做。一个FileSystemWatcher本身不足以保持进程运行。当没有事件被服务时,就不需要线程,即使需要一个线程,它也将是一个后台线程 流程需要保持运行的是。该线程正在做什么并不重要,只要至少存在一个线程 对于这样一个线程,您似乎没有任何有用的工作要做——但您需要一个。我建议您创建一个线程,只需等待设置。然后使用该变量而不是finished变量来指示何时关闭服务 此时,前景线程退出,没有前景线程留下,进程关闭,服务停止
请注意,您必须为此等待的工作创建一个新线程。调用OnStart和OnStop的线程不属于您。这是一个为服务控制管理器提供服务的线程,您需要让它这样做。顺便说一句,您不应该从OnStart或任何地方调用OnStop explicity。否则,当您的服务处于另一个状态时,服务控制经理将报告一个状态。我认为这很可能是错误的,但由于它无论如何都会停止,所以我尝试了失败。这是我第一次创建服务,没关系。下面有一些很好的提示和链接。祝你好运顺便说一下,你不应该从OnStart或任何地方调用OnStop explicity。否则,当您的服务处于另一个状态时,服务控制经理将报告一个状态。我认为这很可能是错误的,但由于它无论如何都会停止,所以我尝试了失败。这是我第一次创建服务,没关系。下面有一些很好的提示和链接。祝你好运我对这一切都很陌生,请原谅我的无知。你说可能产生一个线程/运行任务是什么意思?我对这一切都很陌生,请原谅我的无知。你所说的可能产生线程/运行任务是什么意思?创造了奇迹。我不知道这件事,但我觉得它会经常派上用场。谢谢!创造了奇迹。我不知道这件事,但我觉得它会经常派上用场。谢谢!