public bool Watch(string path, string filter) { if (Disposed) { return(false); } UnWatch(); try { UnWatch(); path = ConvertPathToOSPath(path); filter = ConvertPathToOSPath(filter); // Check to see if this is a path to a file name IsFile = !Directory.Exists(path); if (IsFile) { // Use the file name as the filter filter = Path.GetFileName(path); // Get the file directory to use as the path path = Path.GetDirectoryName(path); } //Now find a corresponding watcher from the dictionary string key = System.IO.Path.Combine(path, filter); RefCountedFileSystemWatcher watcher = null; if (g_file_system_watchers.TryGetValue(key, out watcher) && null != watcher) { Watcher = watcher; Watcher.AddRef(); } else { watcher = new RefCountedFileSystemWatcher(); g_file_system_watchers.Add(key, watcher); watcher.Impl.Path = path; watcher.Impl.Filter = filter ?? "*.*"; Watcher = watcher; } Watcher.Impl.Changed += OnChanged; Watcher.Impl.Created += OnChanged; Watcher.Impl.Deleted += OnChanged; Watcher.Impl.Renamed += OnRenamed; Watcher.Impl.EnableRaisingEvents = true; return(true); } catch (Exception e) { var message = string.IsNullOrWhiteSpace(path) ? UI.Localization.LocalizeString("RhinoFileWatcher.Watch *error* empty path", 39) : string.Format(UI.Localization.LocalizeString("RhinoFileWatcher.Watch *error* parsing path name \"{0}\"", 40), path); RhinoApp.WriteLine(message); RhinoFileEventWatcherHooks.DumpException(e); return(false); } }