internal void ShowTrackerBlocking() { lock (m_lock) { if (m_finished) { return; } m_tracker = m_factory.CreateProgressTracker(); m_tracker.Canceled += new EventHandler(this.OnTrackerCanceled); } // Do the initial update UpdateTracker(); try { // Call this out side the lock since Display is allowed to block. // Also catch errors because there is a race condition that can // cause m_tracker to be destroyed before being displayed. m_factory.Display(m_tracker); } catch (Exception ex) { Logger.Trace("Error caught while displaying ProgressTracker", ex); } }