我想知道在C#中如何避免或停止FileSystemWatcher
两次举起事件?我有一个解决方案,如果有一个文件夹中新创建的xml文件,将每次都检测到。我使用记事本创建xml文件测试我的应用程序,但是从列表框中显示两次。
如何解决此问题?
这是我的代码:
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
try
{
fileSystemWatcher1.EnableRaisingEvents = false;
listBox1.Items.Add(e.FullPath);
}
finally
{
fileSystemWatcher1.EnableRaisingEvents = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult dialogSelectFolder = folderBrowserDialog1.ShowDialog();
if (dialogSelectFolder.ToString() == "OK")
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
button2.Enabled = true;
}
}
private void button2_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = true;
fileSystemWatcher1.EnableRaisingEvents = true;
fileSystemWatcher1.Path = textBox1.Text;
fileSystemWatcher1.Filter = "*.xml";
}
private void button3_Click(object sender, EventArgs e)
{
button1.Enabled = true;
button3.Enabled = false;
textBox1.Text = "";
fileSystemWatcher1.EnableRaisingEvents = false;
}
}
答案 0 :(得分:1)
我本人两次偶然发现了这个问题,并创建了一个类,可以帮助您一次仅获得一个事件。当文件不处于读取模式时(例如,复制文件时),您也可能会得到错误事件。
您必须创建一个队列并在其中存储所有事件,如果时间间隔过去,则引发相应的事件。
不幸的是,这不是一个简单的功能,因此我将提供完整的代码。
y=[{'id': 1, 'var1': 'a', 'var2': 'left', 'var3': 0.1, 'var4': 1},
{'id': 2, 'var1': 'a', 'var2': 'right', 'var3': 0.3, 'var4':4},
{'id': 4, 'var1': 'b', 'var2': 'left', 'var3': 0.4, 'var4':4},
{'id': 5, 'var1': 'b', 'var2': 'right', 'var3': 0.5, 'var4':7}]
您可以在以下位置找到代码: https://github.com/melenaos/FileSystemSafeWatcher/blob/master/FileSystemSafeWatcher.cs