何时/何地实现FileSystemWatcher

时间:2016-03-09 01:15:17

标签: c# filesystemwatcher

我现在正在使用代码(程序),使用select输入文件,输出文件夹然后转换为xml。

所有变量和方法都在一个类中(另一个文件,但这没有问题)。

反正。我想将其行为改为hotfolder行为;这样,当某个文件被添加到文件夹时,它将根据已经实现的方法处理并执行我想要的任何内容。

好的,现在我的问题出现了:实际上,在Form1.cs上我得到的是一些button_click调用。 我应该将FileSystemWatcher + OnChanged方法放在Form1.Cs中,还是应该将它放在我的Classes.cs文件中(这是包含所有方法,变量等的文件 - 业务逻辑)。 另外,我什么时候打电话给它?一旦form1初始化将是最好的? 感谢您的任何意见:)

1 个答案:

答案 0 :(得分:2)

当然,不要把看守者放在你的表格中。

您可以使用的模式是这样的:

public class DirectoryRefresher : IDisposable
{
    private FileSystemWatcher FileWatcher { get; set; }

    public DirectoryRefresher(string directorypath)
    {
        FileWatcher = SetupFileWatcher(directoryPath);
    }

    protected FileSystemWatcher SetupFileWatcher(string path)
    {
        var watcher = new FileSystemWatcher(path);

        watcher.Changed += (sender, e) => { DoYourProcessing(e.FullPath); };
        watcher.Created += (sender, e) => { DoYourProcessing(e.FullPath); };
        watcher.Deleted += (sender, e) => { DoYourProcessing(e.FullPath); };

        watcher.EnableRaisingEvents = true;

        return watcher;
    }

    public void DoYourProcessing(string filePath)
    {
        ...
    }

    public void Dispose()
    {
        try
        {
            if (FileWatcher != null)
            {
                FileWatcher.Dispose();
                FileWatcher = null;
            }
        }
        catch
        {
            // ignored
        }
    }

}

当您知道该文件夹时,您只需实例化DirectoryRefresher。当你想要停止它时,你只需Dispose()它。