private void RemoveManager(IWpfTaskVisualizationManager manager) { manager.Dispose(); lock (_visualizationManagers) { _visualizationManagers.Remove(manager); } }
public UIElement CreateElement(Application app, Window window, params object[] parameters) { IWpfTaskVisualizationManager manager; UIElement showMoreIndicator = _showMoreFactory.CreateElement(app, window, parameters); lock (_visualizationManagers) { IWpfTaskVisualizationManager firstManager = _visualizationManagers.FirstAvailable(); IEnumerable <ITaskObserver> activeTasks = firstManager?.ActiveTasks; IEnumerable <ITaskObserver> pendingTasks = firstManager?.PendingTasks; manager = new TaskVisualizationManager(_maxElements, showMoreIndicator, SigmaEnvironment.TaskManager, activeTasks, pendingTasks); _visualizationManagers.Add(manager); } // When the window is closed, unassign the manager to prevent memory leaks. EventHandler handler = null; handler = (sender, args) => { RemoveManager(manager); window.Closed -= handler; }; window.Closed += handler; Grid grid = new Grid(); // + 1 for the show more indicator for (int i = 0; i <= _maxElements; i++) { grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) }); } // add the TaskVisualizers for (int i = 0; i < _maxElements; i++) { grid.Children.Add(manager.TaskVisualizers[i]); Grid.SetColumn(manager.TaskVisualizers[i], i); } // add the show more indicator grid.Children.Add(showMoreIndicator); Grid.SetColumn(showMoreIndicator, _maxElements); return(grid); }