c# - Filewatcher 和队列管理
问题描述
我文件监视一个目录以进行删除、添加和更改。我从加法开始。处理时间迫使我进行队列管理,否则我将跳过目录中添加的大量文件。这是代码: 声明:
static ConcurrentQueue<string> q = new ConcurrentQueue<string>();
然后在 Form_load 中:
Task.Factory.StartNew(filesAdded);
文件观察器功能:
private void fileSystemWatcher1_Created_1(object sender, FileSystemEventArgs e)
{
q.Enqueue(e.FullPath);
}
然后是 filesAdded 函数:
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);
}
}
}
信贷去雷内这里
它工作正常,但我正在努力寻找一种方法来使用相同的机制来修改和删除文件。
private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
{}
private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
{}
我想在 filesAdded 函数中获取触发器信息(显然需要重命名),但我不知道该怎么做,因为 Enqueue 方法只需要一个参数。任何帮助表示赞赏!
解决方案
感谢pinkfloydx33,我正在使用一个类:
private class FileWatched
{
public string fp { get; set; }
public string trigger { get; set; }
}
然后在 filesAdded 循环中:
while (run)
{
if (q.TryDequeue(out fw) && run)
{
switch (fw.trigger)
{
case "created":
Globals.getTags(fw.fp);
Globals.ecritDs(fw.fp, true);
break;
case "modified":
break;
case "deleted":
break;
}
}
}
推荐阅读
- perl - 如何解决 Perl 中的 @INC 相关问题
- ios - 基于模式的 UIControl 动作
- anychart - 如何在饼图中实现向下钻取?
- c# - 使用 Linq Lambda 按字符串子对象属性过滤实体对象列表
- wagtail - Wagtail 在 Debug = False 上返回 500 错误
- android - Android AsyncTaskLoader:如何在适配器中使用它
- excel - 如何使用 SAP 和 vba 改变数据?
- unix - Repository packages-microsoft-com-prod 在配置中多次列出
- greenplum - 通过 PXF 查询外部表失败
- java - Java 是否位于 Chomsky Hierarchy 的 Type-0 lavel 中?