protected override void Dispose(bool disposing) { Exception disposeException = null; try { if (disposing) { if (m_monitorDocumentsService != null) { m_monitorDocumentsService.DocumentOpened -= OnDocumentOpened; m_monitorDocumentsService.DocumentClosed -= OnDocumentClosed; m_monitorDocumentsService = null; } if (m_diagramContexts != null) { foreach (DiagramContext diagramContext in m_diagramContexts.Values) { try { diagramContext.Dispose(); } catch (Exception ex) { disposeException = ex; } } m_diagramContexts = null; } if (m_designerContext != null) { try { m_designerContext.Dispose(); m_designerContext = null; } catch (Exception ex) { disposeException = ex; } } } else { m_monitorDocumentsService = null; m_designerContext = null; m_diagramContexts = null; } } finally { base.Dispose(disposing); // rethrow dispose exception if any if (disposeException != null) { throw disposeException; } } }