In my window, I need to set a list of FileWatcher
, for a list on machines.
For this I set a new class MachineWatcher
:
public class MachineWatcher : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
private bool NotifyPropertyChanged<T>(ref T variable, T valeur, [CallerMemberName] string nomPropriete = null)
{
if (object.Equals(variable, valeur)) return false;
variable = valeur;
NotifyPropertyChanged(nomPropriete);
return true;
}
private Machine machine { get; set; }
public Machine Machine { get { return this.machine; } set { this.machine = value; } }
private string typeWatcher { get; set; } = "";
public string TypeWatcher { get { return this.typeWatcher; } set { this.typeWatcher = value; } }
FileSystemWatcher watcher { get; set; }
public FileSystemWatcher Watcher { get { return this.watcher; } set { this.watcher = value; } }
private string lastFileName { get; set; } = "";
private DateTime lastEvent { get; set; } = DateTime.MinValue;
private ObservableCollection<string> listErrors { get; set; } = new ObservableCollection<string>();
public ObservableCollection<string> ListErrors { get { return this.listErrors; } set { this.listErrors = value; NotifyPropertyChanged("ListErrors"); } }
public MachineWatcher()
{
}
public MachineWatcher(string type,string directoryStock,string fileFilter)
{
this.typeWatcher = type;
this.watcher = new FileSystemWatcher
{
Path = Path.GetDirectoryName(directoryStock),
Filter = fileFilter
};
if (this.typeWatcher=="stock")
{
this.watcher.Created += new FileSystemEventHandler(OnStockFileCreated);
}
else if(this.typeWatcher=="machine")
{
//this.watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.CreationTime;
this.watcher.Changed += OnFeedBackNesterCreated;
this.watcher.Created += OnFeedBackNesterCreated;
this.watcher.Renamed += OnFeedBackNesterCreated;
this.watcher.Deleted += OnFeedBackNesterCreated;
}
this.watcher.EnableRaisingEvents = true;
}
private void OnFeedBackNesterCreated(object source, FileSystemEventArgs e)
{
try
{
//try to read file
}
catch
{
string errorText = "Error reading file " + e.FullPath;
this.ListErrors.Add(errorText);
}
}
}
Then in my mainWindow I defined a List<MachineWatcher>
I create then like that :
MachineWatcher machineWatcher = new MachineWatcher("stock", directoryStock, "*.csv");
this.listMachineWatchers.Add(machineWatcher);
What I would like, is when my MachineWatcher
meets an error, and go in catch
, update a Observable<string> ListErrors
, where are written all the errors for all machines.
Is there a way to call a function in MainWindows from the object MachineWatcher?