您的位置:首页 > 其它

临视目录内容是否有改变的解读

2015-04-04 16:17 204 查看

http://s.codeproject.com/Articles/271669/Using-FileSystemWatcher-to-monitor-multiple-direct

Using FileSystemWatcher to monitor multiple directories

There are times that we need to monitor multiple directories and if any changes are available, invoke a given method.

In a previous example, I have showed how to use the
FileSystemWatcher
class to monitor a directory. But there are times that we need to monitor multiple directories and if any changes are available, invoke a given method.

We can do that by using the following method. First create a class. We’ll call this class
Watcher
.

1: public class Watcher
2:     {
3:
4:         public string Directory { get; set; }
5:         public string  Filter { get; set; }
6:
7:
8:         private Delegate _changeMethod;
9:
10:         public Delegate ChangeMethod
11:         {
12:             get { return _changeMethod; }
13:             set { _changeMethod = value; }
14:         }
15:
16:         FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
17:
18:         public Watcher(string directory, string filter, Delegate invokeMethod)
19:         {
20:             this._changeMethod = invokeMethod;
21:             this.Directory = directory;
22:             this.Filter = Filter;
23:         }
24:
25:
26:         public void StartWatch()
27:         {
28:
29:
30:             fileSystemWatcher.Filter = this.Filter;
31:             fileSystemWatcher.Path = this.Directory;
32:             fileSystemWatcher.EnableRaisingEvents = true;
33:
34:             fileSystemWatcher.Changed +=
new FileSystemEventHandler(fileSystemWatcher_Changed);
35:         }
36:
37:         void fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
38:         {
39:             if (_changeMethod != null)
40:             {
41:                 _changeMethod.DynamicInvoke(sender, e);
42:             }
43:         }
44:     }

And we can use it to monitor multiple directories as shown below (for this example, I have used a console application and I am only considering the change event):

1: class Program
2:     {
3:         delegate void invokeMethodDelegate(object sender, FileSystemEventArgs e);
4:
5:         static void Main(string[] args)
6:         {
7:
8:             invokeMethodDelegate mymethod = new invokeMethodDelegate(InvokeMethod);  //公用的全局函数
9:             Watcher w1 = new Watcher(@"C:\Directory1", "*.*", mymethod); //这里先后创建两个监视对象,指向共同的全局函数
10:             w1.StartWatch();
11:
12:             Watcher w2 = new Watcher(@"D:\Directory2", "*.*", mymethod);
13:             w2.StartWatch();
14:
15:             string zRetVal = Console.ReadLine();
16:
17:
18:         }
19:
20:         static  void InvokeMethod(object sender, FileSystemEventArgs e)//公用的全局函数
21:         {
22:             Console.WriteLine("Change in file {0}", e.FullPath);
23:         }
24:     }


所以,看到C#的事件机制,还是比较让人感觉亲切。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐