FileSystemWatcher 不能正常工作 WPF
FileSystemWatcher doesnt work properly WPF
FileSystemWatcher 无法正常工作。它仅在第一次更改发生时响应。如果我随后更改第二个文件,则什么也不会发生。
public class ImageViewModel : INotifyPropertyChanged
{
public static ImageViewModel singletonInstance { get; set; }
FileSystemWatcher watcher;
private readonly BackgroundWorker worker1;
public ImageViewModel()
{
...
watcher = new FileSystemWatcher(RootPath);
watcher.EnableRaisingEvents = true;
watcher.IncludeSubdirectories = true;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
this.worker1 = new BackgroundWorker();
this.worker1.DoWork += this.DoWork1;
this.worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_Completed);
}
...
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
editedFile = e.FullPath;
if (worker.IsBusy == true || worker1.IsBusy == true)
{
autoEvent.WaitOne();
}
else
{
this.worker1.RunWorkerAsync();
}
}
}
你能帮我解决这个问题吗?
在您通过调用 AutoResetEvent 的 Set() 方法发出信号之前,不会再次调用 watcher_Changed 事件处理程序。以下调用将阻塞 UI 线程,当它被阻塞时它无法处理任何事件:
autoEvent.WaitOne();
如果您暂时从 watcher_Changed 事件处理程序中删除所有代码并在其中设置一个断点并调试您的应用程序,您应该会看到它实际上会在每次文件更改时被命中:
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
int d = 1; // set a breakpoint on this line, debug your application and modify the file
}
但请记住始终post您的问题的最小、可编译和可运行的示例。
FileSystemWatcher 无法正常工作。它仅在第一次更改发生时响应。如果我随后更改第二个文件,则什么也不会发生。
public class ImageViewModel : INotifyPropertyChanged
{
public static ImageViewModel singletonInstance { get; set; }
FileSystemWatcher watcher;
private readonly BackgroundWorker worker1;
public ImageViewModel()
{
...
watcher = new FileSystemWatcher(RootPath);
watcher.EnableRaisingEvents = true;
watcher.IncludeSubdirectories = true;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
this.worker1 = new BackgroundWorker();
this.worker1.DoWork += this.DoWork1;
this.worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_Completed);
}
...
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
editedFile = e.FullPath;
if (worker.IsBusy == true || worker1.IsBusy == true)
{
autoEvent.WaitOne();
}
else
{
this.worker1.RunWorkerAsync();
}
}
}
你能帮我解决这个问题吗?
在您通过调用 AutoResetEvent 的 Set() 方法发出信号之前,不会再次调用 watcher_Changed 事件处理程序。以下调用将阻塞 UI 线程,当它被阻塞时它无法处理任何事件:
autoEvent.WaitOne();
如果您暂时从 watcher_Changed 事件处理程序中删除所有代码并在其中设置一个断点并调试您的应用程序,您应该会看到它实际上会在每次文件更改时被命中:
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
int d = 1; // set a breakpoint on this line, debug your application and modify the file
}
但请记住始终post您的问题的最小、可编译和可运行的示例。