/// <summary> /// Add event data /// </summary> /// <param name="progressEvent"></param> /// <returns></returns> public ProgressItem AddEventData(Autodesk.Revit.DB.Events.ProgressChangedEventArgs progressEvent) { ProgressItem currentProgressItem = null; switch (progressEvent.Stage) { case ProgressStage.Started: { ProgressItem pi = new ProgressItem(progressEvent.Caption, progressEvent.LowerRange, progressEvent.UpperRange, progressEvent.Position, progressEvent.Stage); m_itemStack.Push(pi); currentProgressItem = pi; break; } case ProgressStage.PositionChanged: { ProgressItem pi = m_itemStack.Peek(); if (pi.Name != progressEvent.Caption) { Debug.WriteLine("Name not matching?"); } pi.Position = progressEvent.Position; pi.Stage = progressEvent.Stage; currentProgressItem = pi; break; } case ProgressStage.RangeChanged: { ProgressItem pi = m_itemStack.Peek(); pi.Upper = progressEvent.UpperRange; pi.Stage = progressEvent.Stage; currentProgressItem = pi; break; } case ProgressStage.Finished: { ProgressItem pi = m_itemStack.Pop(); pi.IsDone = true; pi.Stage = progressEvent.Stage; currentProgressItem = pi; break; } case ProgressStage.CaptionChanged: { ProgressItem pi = m_itemStack.Peek(); pi.Name = progressEvent.Caption; pi.Stage = progressEvent.Stage; Debug.WriteLine("Caption Change at top."); currentProgressItem = pi; break; } case ProgressStage.Unchanged: { Debug.WriteLine("Idle."); currentProgressItem = new ProgressItem(progressEvent.Caption, progressEvent.LowerRange, progressEvent.UpperRange, progressEvent.Position, progressEvent.Stage); break; } default: throw new Exception("Unknown stage."); } if (m_itemStack.Count == 0) { Debug.WriteLine("Stack empty"); } else { Debug.WriteLine(this.ToString()); } return(currentProgressItem); }
void RevitApp_ProgressChanged(object sender, Autodesk.Revit.DB.Events.ProgressChangedEventArgs e) { if ((e.Stage == Autodesk.Revit.DB.Events.ProgressStage.Unchanged) || ((e.Stage == Autodesk.Revit.DB.Events.ProgressStage.PositionChanged) && e.Cancellable)) { this.button_Cancel.IsEnabled = true; } else { this.button_Cancel.IsEnabled = false; } System.Windows.Forms.Application.DoEvents(); if (m_cancel) { bool shouldCancel = e.Cancellable; if (e.IsCancelled()) { textBox_log.Text += "!! We are already canceled!" + Environment.NewLine; } try { e.Cancel(); m_cancel = false; } catch (Exception ex) { textBox_log.Text += ("Exception: " + ex.ToString() + Environment.NewLine + "' Cancelable' value: " + shouldCancel + Environment.NewLine); } } ProgressItem itemReturn = m_progressStack.AddEventData(e); this.stackPanel_ProgressData.Children.Clear(); List <string> progressItems = m_progressStack.ToStringList(6); foreach (string progressItem in progressItems) { TextBox tbProgressItem = new TextBox(); tbProgressItem.Text = progressItem; if (tbProgressItem.Text.Contains("<None>")) { tbProgressItem.Foreground = Brushes.LightSlateGray; } this.stackPanel_ProgressData.Children.Add(tbProgressItem); } if ((itemReturn.Stage == Autodesk.Revit.DB.Events.ProgressStage.RangeChanged) || (itemReturn.Stage == Autodesk.Revit.DB.Events.ProgressStage.Unchanged)) { string previousEventData = "null"; if (m_previousEvent != null) { previousEventData = m_previousEvent.ToString(); } // textBox_log.Text += "Previous: "+ previousEventData + Environment.NewLine + "Current: " + itemReturn.ToString() + Environment.NewLine; } System.Windows.Forms.Application.DoEvents(); m_previousEvent = itemReturn; }