FileSystemWatcher 停止工作,没有消息[重复]

问题描述 投票:0回答:2

开发中的朋友们大家好!

情况: 我有一项小型服务,用于一些简单的文件交换作业,将文件从一个系统移动到另一个系统,并进行一些搜索和替换/解压缩。用 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();
}

问题描述: 文件观察器的路径位于另一台服务器上,因此我正在连接到共享。 文件观察器有时会失去与目录的连接(网络问题、维护时段期间服务器重新启动或其他原因)。 如果发生这种情况,文件观察器不会重新连接到服务器或抛出异常或任何其他表明他不再连接的指示。就是什么都不做!

问题 我可以做些什么来检查文件观察器是否失去了连接? 因为我现在的解决方法是每天晚上使用计划的作业重新启动服务器,并首先检查现有文件并在之前处理它们。但如果你使用文件观察器,我认为这不是应该的想法。

非常感谢

c# events filesystemwatcher
2个回答
3
投票

垃圾收集器可能会删除 FileSystemWatcher 实例。

尝试GC.KeepAlive

Console.ReadLine();
GC.KeepAlive(fsw);

0
投票

您是否尝试过将所有 FSW 内容放入带有 try-catch 的方法中?当该方法退出时,您可以简单地在 while 循环中再次调用它,如下所示(伪):

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.