FileSystemWatcher停止工作,没有消息
本文关键字:消息 停止工作 FileSystemWatcher | 更新日期: 2023-09-27 18:09:44
大家好!
: 我有一个小的服务,用于一些简单的文件交换工作,将文件从一个系统移动到另一个系统,做一些搜索和替换/解压缩的东西。用c#编写的服务使用FileSystemWatcher来检查文件夹中的新文件。代码:
private static void Main(string[] args)
{
try
{
InitializeService();
}
catch (Exception ex)
{
}
fsw = new FileSystemWatcher();
fsw.Path = RootPath;
//Watch only directories
fsw.NotifyFilter = NotifyFilters.DirectoryName;
//Add the event functions
fsw.Created += FileSystemEvent;
//fsw.Changed += FileSystemEvent;
fsw.Error += OnError;
//start the listener
fsw.EnableRaisingEvents = true;
Console.WriteLine("Started with path: " + RootPath);
Console.ReadLine();
}
问题描述:文件监视程序的路径在另一台服务器上,所以我正在连接到共享。filewatcher有时会失去与目录的连接(网络问题、维护窗口期间服务器重新启动或其他)。如果发生这种情况,filewatcher不会重新连接到服务器,也不会抛出异常或任何其他表示不再连接的指示。什么都不做!
我能做些什么来检查文件监视程序是否失去了连接?因为我现在的解决方法是每天晚上用一个预定的作业重新启动服务器,首先检查现有文件,然后再处理它们。但是,如果你使用一个文件监视器,我认为这不应该是这样的想法。
多谢
可能是垃圾收集器删除了FileSystemWatcher实例。
GC。KeepAlive:
Console.ReadLine();
GC.KeepAlive(fsw);
您是否尝试过将所有FSW-stuff放入带有try-catch的方法中?当方法退出时,您可以简单地在while循环中再次调用它,像这样(pseudo):
private static void Main(string[] args)
{
while (true)
{
CallWatcher();
}
}
private static void CallWatcher()
{
var watcher = new FileSystemWatcher();
try
{
// do watcher stuff here
}
finally
{
watcher.Dispose();
}
}