我使用FileSystemWatcher监控网络存储上的多个文件夹。 问题是我必须计算每个位置的更改数量。计数器未正确递增,因为当第二个位置的文件发生更改时,计数器已设置为2。
我有以下代码:
private void button1_Click(object sender, EventArgs e)
{
FileMonitor(Directory.GetCurrentDirectory());
FileMonitor(@"C:\Users\NET\Desktop");
}
static int _counter = 1;
public static int Counter
{
get { return _counter; }
set { _counter = value; }
}
private void FileMonitor(string path)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.csv";
watcher.Changed += (s, e) => OnChanged(e.FullPath, watcher);
watcher.EnableRaisingEvents = true;
}
private static void OnChanged(string path, FileSystemWatcher watcher)
{
try
{
watcher.EnableRaisingEvents = false;
MessageBox.Show(Counter.ToString());
Counter = Counter + 1;
}
finally
{
watcher.EnableRaisingEvents = true;
}
}
如何将计数器设置为每个FileMonitor实例的唯一值?
答案 0 :(得分:1)
问题在于您将计数器设为静态,因此所有显示器都会共享此计数器。有一些方法可以帮助您:
我希望这可以帮到你。
编辑:
MainWindow.xaml.xs
List<FileMonitor> monitors = new List<FileMonitor>();
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
monitors.Add(new FileMonitor(@"C:"));
monitors.Add(new FileMonitor(@"D:"));
}
<强> FileMonitor.cs 强>
public class FileMonitor
{
public int Counter { get; set; }
public FileSystemWatcher Watcher { get; set; }
public FileMonitor(string path)
{
Counter = 0;
Watcher = new FileSystemWatcher();
Watcher.Path = path;
Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
Watcher.Filter = "*.csv";
Watcher.Changed += (s, e) => OnChanged();
Watcher.EnableRaisingEvents = true;
}
private void OnChanged()
{
try
{
Watcher.EnableRaisingEvents = false;
MessageBox.Show(Counter.ToString());
Counter = Counter + 1;
}
finally
{
Watcher.EnableRaisingEvents = true;
}
}
}