private void ProcessCleanQueue(bool onClose = false) { var workbooks = Application.Workbooks.Cast <Excel.Workbook>().ToArray(); while (CleanQueue.Count > 0) { var closedBookName = ""; if (!CleanQueue.TryDequeue(out closedBookName)) { continue; } if (!onClose && workbooks.Any(x => x.Name == closedBookName)) { continue; } PaneAndControl pane_control; if (Panes.TryRemove(closedBookName, out pane_control)) { CleanUpPaneAndControl(pane_control); } } }