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() 它。
我现在有一个代码(程序)可以使用,它使用 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() 它。