Наследование: SAutoShelveService, IAutoShelveService, IDisposable
 public int OnAfterOpenSolution(object pUnkReserved, int fNewSolution)
 {
     if (!string.IsNullOrWhiteSpace(_dte.Solution.FullName))
     {
         var slnDirectory = Path.GetDirectoryName(_dte.Solution.FullName);
         if (TfsAutoShelve.IsValidWorkspace(slnDirectory))
         {
             InitializeAutoShelve(slnDirectory);
         }
     }
     return(0);
 }
 public int OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
 {
     if (_autoShelve == null || _autoShelve.Workspace == null)
     {
         object projectObj;
         pHierarchy.GetProperty(Microsoft.VisualStudio.VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out projectObj);
         var project = (Project)projectObj;
         if (project != null && !string.IsNullOrWhiteSpace(project.FullName))
         {
             var projDirectory = Path.GetDirectoryName(project.FullName);
             if (TfsAutoShelve.IsValidWorkspace(projDirectory))
             {
                 InitializeAutoShelve(projDirectory);
             }
         }
     }
     return(0);
 }
 // The bulk of the clean-up code is implemented in Dispose(bool)
 protected override void Dispose(bool disposeManaged)
 {
     if (disposeManaged)
     {
         // free managed resources
         if (_timer != null)
         {
             _timer.Enabled = false;
             _timer.Dispose();
             _timer = null;
         }
         if (_autoShelve != null)
         {
             _autoShelve.Dispose();
             _autoShelve = null;
         }
     }
     base.Dispose(disposeManaged);
 }
        private void InitializeAutoShelve(string workingDirectory)
        {
            InitializeSolutionServiceEvents();
            try {
                _autoShelve = new TfsAutoShelve(_extName, _dte);

                // Tools->Options event wire-up
                _options.OnOptionsChanged += Options_OnOptionsChanged;

                // Event Wire-up
                _autoShelve.OnShelvesetCreated   += autoShelve_OnShelvesetCreated;
                _autoShelve.OnTfsConnectionError += autoShelve_OnTfsConnectionError;
                _autoShelve.OnTimerStart         += autoShelve_OnTimerStart;
                _autoShelve.OnTimerStop          += autoShelve_OnTimerStop;
                _autoShelve.OnWorkspaceChanged   += autoShelve_OnWorkspaceChanged;

                // Property Initialization
                _autoShelve.MaximumShelvesets = _options.MaximumShelvesets;
                _autoShelve.OutputPane        = _options.OutputPane;
                _autoShelve.ShelvesetName     = _options.ShelvesetName;
                _autoShelve.TimerInterval     = _options.TimerSaveInterval;
                _autoShelve.SuppressDialogs   = _options.SuppressDialogs;
                _autoShelve.WorkingDirectory  = workingDirectory;

                _autoShelve.StartTimer();
            } catch {
                if (_autoShelve != null)
                {
                    _options.OnOptionsChanged -= Options_OnOptionsChanged;

                    _autoShelve.OnShelvesetCreated   -= autoShelve_OnShelvesetCreated;
                    _autoShelve.OnTfsConnectionError -= autoShelve_OnTfsConnectionError;
                    _autoShelve.OnTimerStart         -= autoShelve_OnTimerStart;
                    _autoShelve.OnTimerStop          -= autoShelve_OnTimerStop;
                    _autoShelve.OnWorkspaceChanged   -= autoShelve_OnWorkspaceChanged;
                }
            }
        }