public EventTransition(FileChangedReason previousReason, FileChangedReason currentReason, FileChangedReason newReason) { PreviousReason = previousReason; CurrentReason = currentReason; NewReason = newReason; }
public FileChangedEventArgs(string file, FileChangedReason reason) { File = file; ChangedReason = reason; }
private void AddEvent(string file, FileChangedReason reason) { lock (_eventsLock) { _events.Add(new FileChangedEventArgs(file, reason)); } Task.Delay(500).ContinueWith(task => { lock (_eventsLock) { if (_events.Any()) { try { if (Changed != null) { var events = new Dictionary<string, FileChangedReason>(); foreach (var evt in _events) { FileChangedReason prevReason; if (!events.TryGetValue(evt.File, out prevReason)) { prevReason = FileChangedReason.None; } var newReason = _eventTransitions .Single(t => t.PreviousReason == prevReason && t.CurrentReason == evt.ChangedReason) .NewReason; events[evt.File] = newReason; } foreach (var evt in events.Where(x => x.Value != FileChangedReason.None)) { Changed(this, new FileChangedEventArgs(evt.Key, evt.Value)); } } } finally { _events.Clear(); } } } }); }