每1秒扫描一个目录

时间:2016-06-05 19:31:42

标签: .net

如果我想监视作为服务运行的.net服务器应用程序中的目录,您何时会说服务器的扫描之间的间隔是“不健康”?

如果我知道服务器可以很好地处理它,我想每1秒扫描一次目录。

使用文件系统观察程序不是我的选择。

非常感谢您的体验。

更新: 扫描的目录将没有任何子目录。 文件大小预计在5kb到500kb左右。

我想在我的应用程序准备好接收新数据时轮询目录,所以在这种情况下我不认为文件系统观察者适合。 一个选项当然是保存有关FSW在“待处理列表”中触发的文件的信息。

1 个答案:

答案 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();
    }
}