FileSystemWatcher在没有消息的情况下停止工作

时间:2015-08-24 12:23:15

标签: c# events

嗨发展朋友!

情况: 我为一些简单的文件交换作业提供了一个小服务,可以将文件从一个系统移动到另一个系统,并进行一些搜索和替换/解压缩。用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有时会丢失与目录的连接(网络问题,维护窗口期间的服务器重启或任何事情)。 如果发生这种情况,则filewatcher不会重新连接到服务器或抛出异常或任何其他不再连接的指示。什么都不做!

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

非常感谢

2 个答案:

答案 0 :(得分:0)

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

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();
    }
}

答案 1 :(得分:0)

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

尝试GC.KeepAlive

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