我正在使用FileSystemWatcher 在Changed Event上,我想传递一个整数变量。
e.g。
int count = someValue;
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "C:\temp";
watcher.Changed += new FileSystemEventHandler(fileSystemWatcher_Changed);
在fileSystemWatcher_Changed上,我想取计数值,然后做一些工作。 但是我如何获得这个价值。
如果我计算一个全局变量,它将无效,因为每个文件的计数更改都会更改事件并从用户传递。
答案 0 :(得分:5)
最简单的方法是使用lambda表达式:
watcher.Changed += (sender, args) => HandleWatcherChanged(count);
听起来,如果方法想要更新值,您可能希望通过引用传递count
。
答案 1 :(得分:3)
为什么不将FileSystemWatcher
子类化并将计数传递给子类的构造函数?
答案 2 :(得分:1)
您可以维护一个全局字典,将每个文件(路径)映射到其计数:
readonly Dictionary<string, int> filesChangeCount=
new Dictionary<string, int>();
然后,在您的事件处理程序中,只需增加字典中的相应计数:
void fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
lock (filesChangeCount)
{
int count;
filesChangeCount.TryGetValue(e.FullPath, out count);
filesChangeCount[e.FullPath] = count++;
}
}
答案 3 :(得分:0)
如果您想知道全局调用fileSystemWatcher_Changed
的频率,您也可以使用静态变量。如果您想知道该类的一个特定实例中的呼叫数量,请删除static
关键字。
private static int _count;
private void fileSystemWatcher_Changed(object sender, EventArgs e)
{
Console.WriteLine("fileSystemWatcher_Changed was called {0} times",
++_count);
}
答案 4 :(得分:0)
请注意,如果您在更改的处理程序中使用全局变量,则应该使用锁定来使用变量,因为更改的事件将由多个线程调用。
private static int _count;
private object lockerObject = new object();
private void fileSystemWatcher_Changed(object sender, EventArgs e)
{
lock(lockerObject)
{
Console.WriteLine("fileSystemWatcher_Changed was called {0} times",
++_count);
}
}