如果我想监视作为服务运行的.net服务器应用程序中的目录,您何时会说服务器的扫描之间的间隔是“不健康”?
如果我知道服务器可以很好地处理它,我想每1秒扫描一次目录。
使用文件系统观察程序不是我的选择。
非常感谢您的体验。
更新: 扫描的目录将没有任何子目录。 文件大小预计在5kb到500kb左右。
我想在我的应用程序准备好接收新数据时轮询目录,所以在这种情况下我不认为文件系统观察者适合。 一个选项当然是保存有关FSW在“待处理列表”中触发的文件的信息。
答案 0 :(得分:1)
您可以使用System.Timers.Timer
执行此操作。将其间隔设置为1000,因为它接受毫秒,然后将AutoReset
属性设置为true
。可能在扫描期间禁用计时器是合适的,因此如果扫描时间超过一秒,则不会再次启动(在另一个线程池线程上)。
partial class AService : ServiceBase
{
Timer CountDown = new Timer(1000);
void CountDown_Elapsed(object sender, ElapsedEventArgs e)
{
CountDown.Enabled = false;
ScanFolder("C:\\Temp");
CountDown.Enabled = true;
}
void ScanFolder(string FolderPath)
{
var files = Directory.EnumerateFiles(FolderPath);
// Manipulate files ...
}
public AService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
CountDown.Elapsed += CountDown_Elapsed;
CountDown.AutoReset = true;
CountDown.Enabled = true;
}
protected override void OnStop()
{
CountDown.Stop();
CountDown.Dispose();
}
}