Filesystemwatcher C# 观察器对象在启动时持续存在

Filesystemwatcher C# watcher objects persist on startup

学习本教程:http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-F

我修改了上面的教程并创建了一个 windows 表单应用程序,它可以创建多个 filesystemwatcher 实例并 track/delete 它们在表单的列表中。

我的下一个目标是在计算机 restart/startup 上,windows 表单应用程序以及我创建的所有观察者对象将保持活动状态。

我认为这需要 4 个部分:
1) 保存重启后要访问的watcher对象及其元数据的信息(目前我将对所有watcher对象的引用保存在一个List变量中)
2) 即使在重启后观察者对象仍然存在
3) 在启动时启动 windows 表单
4) 访问保存的观察者对象信息,使其仍然出现在windows表单列表中。

我是 C# 的新手,这是我的第一个项目,所以我对如何处理这些步骤一无所知。任何帮助将不胜感激。

您必须在重启后创建新的观察者对象。您需要存储的信息需要有不同的class,例如:

public class SettingItem
{
  public string Path { get; set; }
}
public class Settings
{
    public SettingItem[] Items { get; set; }
}

然后您可以使用XmlSerializer将对象存储在磁盘上:

public static class SettingManager
{
    public static void Save(string path, object obj)
    {
        if (string.IsNullOrWhiteSpace(path))
            throw new ArgumentNullException(nameof(path));
        if (obj == null)
            throw new ArgumentNullException(nameof(obj));

        Directory.CreateDirectory(Path.GetDirectoryName(path));

        using (var s = new StreamWriter(path))
        {
            var xmlSerializer = new XmlSerializer(obj.GetType());
            xmlSerializer.Serialize(s, obj);
        }
    }

    public static T Load<T>(string path) where T : class, new()
    {
        if (string.IsNullOrWhiteSpace(path))
            throw new ArgumentNullException(nameof(path));

        if (File.Exists(path))
        {
            using (var s = new StreamReader(path))
            {
                var xmlSerializer = new XmlSerializer(typeof(T));
                return xmlSerializer.Deserialize(s) as T;
            }
        }
        return new T();
    }
}

用法:

var settingPath = @"c:\...xml";

var settings0 = new Settings
{
    Items = new[]
    {
        new SettingItem { Path = @"c:\path\to\watch" },
    }
};
SettingManager.Save(settingPath, settings0);

var settings1 = SettingManager.Load<Settings>(settingPath);