private void StartFolderWatchers()
		{
			var projects = CommanderSettings.Projects;
			for (var j = 0; j < projects.Count; j++)
			{
				var folderSettings = CommanderSettings.Projects[j].Folders;

				for (var i = 0; i < folderSettings.Count; i++)
				{
					var folderSetting = folderSettings[i];
					var enhancedFileSystemWatcher =
						_enhancedFileSystemWatcherFactory.CreateEnhancedFileSystemWatcher(
							folderSetting.GetFolderToWatchOrDefault(), folderSetting.Filter, folderSetting.PollTime,
							folderSetting.IncludeSubdirectories, folderSetting);
					_enhancedFileSystemWatchers.Add(enhancedFileSystemWatcher);
				}
			}

			_fileFinishedChangingEvent = new FileFinishedChangingEventHandler(OnFileFinishedChangingEvent);

			foreach (var enhancedFileSystemWatcher in _enhancedFileSystemWatchers)
			{
				enhancedFileSystemWatcher.FileFinishedChangingEvent += _fileFinishedChangingEvent;
			}

			foreach (var enhancedFileSystemWatcher in _enhancedFileSystemWatchers)
			{
				enhancedFileSystemWatcher.Start();
			}
		}
		private void Dispose(bool disposeManagedResources)
		{
			if (!disposeManagedResources) return;
			var disposedAlready = Interlocked.Exchange(ref _alreadyDisposed, 1);
			if (disposedAlready != 0)
			{
				return;
			}

			// Dispose managed resources.

			foreach (var enhancedFileSystemWatcher in _enhancedFileSystemWatchers)
			{
				enhancedFileSystemWatcher.FileFinishedChangingEvent -= _fileFinishedChangingEvent;
			}

			foreach (var enhancedFileSystemWatcher in _enhancedFileSystemWatchers)
			{
				enhancedFileSystemWatcher.Dispose();
			}

			_fileFinishedChangingEvent = null;

			// Dispose unmanaged resources.

			// If it is available, make the call to the
			// base class's Dispose(Boolean) method
		}
        private void Dispose(bool disposeManagedResources)
        {
            if (!disposeManagedResources) return;
            var disposedAlready = Interlocked.Exchange(ref _alreadyDisposed, 1);
            if (disposedAlready != 0)
            {
                return;
            }

            // Dispose managed resources.

            _fileSystemWatcher.Changed -= _fileSystemWatcherChangedEvent;
            _fileSystemWatcher.Created -= _fileSystemWatcherCreatedEvent;
            _fileSystemWatcher.Deleted -= _fileSystemWatcherDeletedEvent;
            _fileSystemWatcher.Renamed -= _fileSystemWatcherRenamedEvent;

            _fileSystemWatcher.Dispose();

            _fileChangedEvent = null;
            _fileCreatedEvent = null;
            _fileDeletedEvent = null;
            _fileRenamedEvent = null;
            _fileFinishedChangingEvent = null;
            // Dispose unmanaged resources.

            // If it is available, make the call to the
            // base class's Dispose(Boolean) method
        }