我的应用程序从另一个系统接收消息,指示文件已在文件夹中发布,然后检查文件夹以将该文件复制到另一个位置。这很好用,但是在应用收到消息后20分钟,文件会在文件夹中发布。我想了解如何在不停止每个文件轮询的情况下创建延迟的一些帮助/想法。
例如:
我尝试使用System.Thread.Timer
和Timespan
,但我不希望应用等到读取第一个文件然后处理第二个文件。我希望它能够持续处理其他消息并阅读文件
任何帮助都会很棒
答案 0 :(得分:1)
<强> MSDN:强>
FileSystemWatcher侦听文件系统更改通知和 当目录或目录中的文件发生更改时,引发事件。
查看msdn了解更多详情。
您需要什么:
FileSystemWatcher fileWatcher;
private void watch()
{
fileWatcher = new FileSystemWatcher();
fileWatcher.Path = path;
fileWatcher.Created += new FileSystemEventHandler(OnCreated);
fileWatcher.EnableRaisingEvents = true;
}
private void OnCreated(object source, FileSystemEventArgs e)
{
WaitForFile(e.FullPath);
//Copy files to another directory.
}
private void WaitForFile(string fullPath)
{
while (true)
{
try
{
using (StreamReader stream = new StreamReader(fullPath))
{
break;
}
}
catch
{
Thread.Sleep(1000);
}
}
}
创建文件后, OnCreated
会命中,但要等到写入文件。不需要任何计时器,因为FileSystemWatcher
将监视新文件的创建。
您可以使用此功能,只有在您收到消息后,所有pdf文件都生成一个特定文件夹。如果它是一个公共文件夹,其中还有其他文件,则需要管理与消息通知相同的pdf文件列表,然后根据OnCreated
中的条件复制它们。