【发布时间】:2020-05-22 21:46:51
【问题描述】:
i filewatching 一个目录以进行删除、添加和更改。 我从加法开始。 处理时间迫使我进行队列管理,否则我将跳过目录中添加的大量文件。 这是代码: 声明:
static ConcurrentQueue<string> q = new ConcurrentQueue<string>();
然后在 Form_load 中:
Task.Factory.StartNew(filesAdded);
Filewatcher 功能:
private void fileSystemWatcher1_Created_1(object sender, FileSystemEventArgs e)
{
q.Enqueue(e.FullPath);
}
然后是文件添加功能:
void filesAdded ()
{
bool run = true;
AppDomain.CurrentDomain.DomainUnload += (s, e) =>
{
run = false;
q.Enqueue("stop");
};
while (run)
{
string filename;
if (q.TryDequeue(out filename) && run)
{
Globals.getTags(filename);
Globals.ecritDs(filename, true);
}
}
}
感谢 Rene here
它工作正常,但我正在努力寻找一种方法来使用相同的机制来修改和删除文件。
private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
{}
private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
{}
我想在 filesAdded 函数中获取触发器信息(显然需要重命名),但我不知道该怎么做,因为 Enqueue 方法只需要一个参数。 任何帮助表示赞赏!
【问题讨论】:
-
而不是 ConcurrentQueue
使用 ConcurrentQueue 然后定义一个类来保存您处理所需的信息。顺便说一句,FileSystemWatcher 有一个默认情况下相对较小的缓冲区。您可能只能增加大小而不删除事件 -
啊啊没想到!谢谢:)
标签: c# winforms queue file-watcher