2015-11-01 28 views
0

按照本教程:http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-FFileSystemWatcher的C#守望对象坚持在启动

我修改了上面的教程,并创建了一个可以创建多个FileSystemWatcher的实例和跟踪/在窗体上的列表中删除一个Windows窗体应用程序。

我的下一个目标是使其在计算机重新启动/启动时,窗体应用程序将保持活动状态以及我创建的所有观察器对象。

我估计,这将需要4个部分:
1)节省守望对象及其元数据信息重新启动后可以访问(目前我引用保存到所有观察者对象列表变量)
2)有即使在重启后观察者对象仍然存在
3)启动时启动窗体窗口
4)访问保存的观察者对象信息,以便它仍然出现在Windows窗体列表中。

我是C#的新手,这是我的第一个项目,所以我对如何解决这些步骤几乎没有想法。任何帮助,将不胜感激。

+0

声音就像你已经有了一个_idea_一样。你能行的。 – MickyD

+0

你会说我的第一步,他们是正确的吗? – somethingstrang

+0

我认为这是一个很好的轮廓,_yes_。你有任何代码要显示吗?看[faq]和[问] – MickyD

回答

1

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

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); 
+0

你好,谢谢你的帮助。 所以如果我正在读你的代码: 1)设置类保存重新创建观察器类所需的元信息 2)SettingItem类保存个人观察器元信息(路径) 3)SettingManager是类将Settings数组保存并加载到xml文件中? – somethingstrang

+0

@somethingstrang对不起,完全错过了你的评论。 Settings类保存一组SettingItem对象,其中每个对象持有单个信息以重新创建观察者,例如'foreach(var x in settings.Items){... new FileSystemWatcher(x.Path); }'。 Settings类只是一个包含XmlSerializer所需的无参数(隐式)构造函数的包装器。 SettingManager包装静态加载和保存功能,不包含任何信息。 – mtman