快速启动简单的C#FileSystemWatcher Windows服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了快速启动简单的C#FileSystemWatcher Windows服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2003字,纯文字阅读大概需要3分钟。
内容图文
![快速启动简单的C#FileSystemWatcher Windows服务](/upload/InfoBanner/zyjiaocheng/966/3113c6ae51ea4ebd876de98e05c1a5ce.jpg)
我有一个Windows服务,我用C#编写.在幕后它是一个FileSystemWatcher. FSW会查找新文件并相应地处理它们.当我的服务启动时,它还需要处理现有文件.当我通过控制台应用程序执行此操作时,一切都按预期工作.
但是,当我尝试将这一切包装在Win服务中时,我的第一个问题是Win服务无法启动.它超时是因为,即使最初要处理的文件很多,处理也需要很长时间.
以下是我“观察”课程的部分代码:
public WatcherService()
{
_log.Debug("WatcherService instantiated.");
_watcher = new FileSystemWatcher { Path = AppConfig.MonitorFolder, IncludeSubdirectories = true };
// we want the watching to start BEFORE we process existing files
// because if we do it the other way, a file might get missed
_watcher.Created += File_OnChanged;
}
public void StartWatching()
{
_log.Debug("WatcherService started.");
// this kicks off the watching
_watcher.EnableRaisingEvents = true;
// process existing files
ProcessExistingFiles(AppConfig.MonitorFolder);
}
我的解决方法是启动FSW“观察”并在单独的异步线程上处理初始文件,就像这样(在我的Windows服务代码中):
protected override void OnStart(string[] args)
{
_log.Debug("LoggingService starting.");
// kick off the watcher on another thread so that the OnStart() returns faster;
// otherwise it will hang if there are a lot of files that need to be processed immediately
Task.Factory.StartNew(() => _watcher.StartWatching()).ContinueWith(t =>
{
if (t.Status == TaskStatus.Faulted)
{
_log.Error("Logging service failed to start.", t.Exception.InnerException ?? t.Exception);
}
});
}
如果我没有在Task.Factory.StartNew()中包装那个“StartWatching”方法,那么OnStart()会超时,这是可以理解的.但现在看来我的StartWat()方法永远不会被调用.我在日志中看到“LoggingService starting”,但没有“WatcherService started”. (编辑:仅供参考我也尝试过Task.Run(),但无济于事.)
怎么了?我确信我要么不明白StartNew()正在做什么和/或有更好的做我想要完成的事情.
思考?
谢谢!
解决方法:
你可以完全避免线程化.只需在OnStart()方法中进行基本设置即可.部分设置是设置一个计时器在一两秒钟内完成.该计时器可以在当前线程上运行,但是在服务空闲后会发生.
这将解决问题,编写线程安全代码更容易.
内容总结
以上是互联网集市为您收集整理的快速启动简单的C#FileSystemWatcher Windows服务全部内容,希望文章能够帮你解决快速启动简单的C#FileSystemWatcher Windows服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。