When/where 实施 FileSystemWatcher

When/where to implement FileSystemWatcher

我现在有一个代码(程序)可以使用,它使用 select 输入文件、输出文件夹,然后转换为 xml。

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

无论如何。我想将其行为更改为热文件夹行为;这样,当一些文件被添加到文件夹时,它会根据已经实现的方法进行处理,并做我想做的任何事情。

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

当然,不要将 Watcher 放入您的表单中。

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

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() 它。