/// <summary>
 /// Disposes the object, cleaning up unmanaged and optionally managed resources.
 /// </summary>
 /// <param name="disposing">Whether to dispose managed resources.</param>
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (m_iconProvider != null)
         {
             m_iconProvider.Dispose();
             m_iconProvider = null;
         }
     }
 }