public void Subscribe([NotNull] IDirectoryListener listener) {
if (listener == null) throw new ArgumentNullException(nameof(listener));
if (_failed) return;
if (_innerWatcher != null) {
_innerWatcher.Changed += listener.FileOrDirectoryChanged;
_innerWatcher.Created += listener.FileOrDirectoryCreated;
_innerWatcher.Deleted += listener.FileOrDirectoryDeleted;
_innerWatcher.Renamed += listener.FileOrDirectoryRenamed;
}
lock (_listeners) {
_listeners.Add(listener);
}
}