C#在循环中创建Filewatcher对象
我正在下面的循环中创建一个C#在循环中创建Filewatcher对象,c#,oop,C#,Oop,我正在下面的循环中创建一个Filewatcher。我想知道是否存在任何性能或引用问题,因为我的引用变量在循环中是相同的 foreach (var dir in dirsToWatch) { **var watcher = new FileSystemWatcher(dir);** watcher.Filter = filter; watcher.Changed += new FileSystemEventHandler(onChange); watcher.Cre
Filewatcher
。我想知道是否存在任何性能或引用问题,因为我的引用变量在循环中是相同的
foreach (var dir in dirsToWatch)
{
**var watcher = new FileSystemWatcher(dir);**
watcher.Filter = filter;
watcher.Changed += new FileSystemEventHandler(onChange);
watcher.Created += new FileSystemEventHandler(onChange);
}
现在还不清楚代码的最终目标是什么,但是如果您想在循环完成后使用
watcher
对象,那么您需要将它们的实例保存在循环之外的集合中。否则,您将没有对它们的引用,它们只会被垃圾收集
例如:
var watchers = new List<FileSystemWatcher>();
foreach (var dir in dirsToWatch)
{
var watcher = new FileSystemWatcher(dir) {Filter = filter};
watcher.Changed += new FileSystemEventHandler(onChange);
watcher.Created += new FileSystemEventHandler(onChange);
watchers.Add(watcher);
}
// Do something with watchers here
// Dispose of watchers when done
watchers.ForEach(watcher => watcher.Dispose());
var-watchers=newlist();
foreach(dirsToWatch中的var dir)
{
var-watcher=newfilesystemwatcher(dir){Filter=Filter};
watcher.Changed+=新文件系统EventHandler(onChange);
watcher.Created+=新文件系统EventHandler(onChange);
watchers.Add(watcher);
}
//对这里的观察者做点什么
//完成后处理观察者
ForEach(watcher=>watcher.Dispose());
否?基于你所拥有的,你被迫按你现在的方式去做。如果不引用dir
,则无法创建watcher
变量。每个循环迭代都将生成自己的watcher
变量,但不能在循环外使用watcher
。你在考虑处理这件物品吗?是的,我也在考虑处理。