将FileSystemEventHandler动态添加到FileSystemWatcher

时间:2014-12-17 10:14:39

标签: c# dynamic module filesystemwatcher eventhandler

我正在尝试创建一个可以从数据库表中检索“hotfolders”列表的Windows服务,其中包含所有信息到FileSystemWatcher(扫描目录,文件过滤器等)。

但是,当我想将Created事件处理程序添加到FileSystemWatcher时,这就解决了这个问题。

id  hotFolderName   directory   fileFilter  engineModule    includeSubdirs
1   PDFinvoices     c:/pdf      *.pdf       pdfModule       0
2   FlatFiles       c:/flat     *.txt       flatModule      1

因此,对于表中的每个帖子,它都会创建一个具有上述设置的FileSystemWatcher但我的问题是当我想将EventHandler绑定到它时。我该如何动态地做到这一点?

所以在这种情况下我想做:

fileSystemWatcher1.Created += new FileSystemEventHandler(dbResultSet("engineModule"));

这可能以某种方式吗?我知道我需要一个名为pdfModule的函数,但这没问题。我只是希望能够添加更多模块,但永远不必更改上面的语法。

在这种情况下,pdfModule可能不在主类中,我想我为每个模块创建一个类。就像pdfModule一样,flatModule ......你明白了。

1 个答案:

答案 0 :(得分:0)

您必须创建自己的文件监视器类并在其中包装观察者属性,对于事件,您可以像下面那样处理它

this.yourwatcher.Created += new FileSystemEventHandler(this.yourwatcher_Created);
this.yourwatcher.EnableRaisingEvents = true;

在服务开始活动中,您可以从DB获取所有信息,并可以执行以下操作

this.filemonitor[0] = new CustomFileMonitor("pdfModule");  // This will configure watcher properties for PDF file types and attach event.
this.filemonitor[0].Start();

为每种文件夹类型创建文件监视器的新实例。