private void CleanupDynamicallyAddedItems() { DropDownItems .OfType <CopyToClipboardToolStripMenuItem>() .ToArray() .ForEach(i => DropDownItems.Remove(i)); }
void param_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "Name") { var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == sender); if (item != null) { item.Text = (sender as QueryParam).Name.DefaultForEmpty("<未命名>"); } } }
/// <summary>Works around a MONO bug by explicitly disposing its Items</summary> protected override void Dispose(bool disposing) { Debug.WriteLineIf(!disposing, "****** Missing Dispose() call for " + GetType() + " ******"); if (disposing) { // BUG: MONO neglects to dispose DropDownItems. Do it now: foreach (var disposable in DropDownItems.OfType <IDisposable>().ToArray()) { disposable.Dispose(); } } base.Dispose(disposing); }
private void EnableAppropriateHostsNoWlb() { if (Stopped || DropDownItems.Count == 0) { return; } var firstItem = DropDownItems[0] as VMOperationToolStripMenuSubItem; if (firstItem == null) { return; } // API calls could happen in CanExecute(), which take time to wait. So a Producer-Consumer-Queue with size 25 is used here to : // 1. Make API calls for different menu items happen in parallel; // 2. Limit the count of concurrent threads (now it's 25). workerQueueWithoutWlb = new ProduceConsumerQueue(25); var selection = Command.GetSelection(); var connection = selection[0].Connection; var session = connection.DuplicateSession(); var affinityHost = connection.Resolve(((VM)selection[0].XenObject).affinity); EnqueueHostMenuItem(this, session, affinityHost, firstItem, true); var hostMenuItems = DropDownItems.OfType <VMOperationToolStripMenuSubItem>().ToList(); if (Stopped) { return; } foreach (VMOperationToolStripMenuSubItem item in hostMenuItems) { var host = item.Tag as Host; if (host != null) { var tempItem = item; EnqueueHostMenuItem(this, session, host, tempItem, false); } } }
void param_PersistentChanged(object sender, EventArgs e) { var param = sender as QueryParam; if (param.IsPersistent) { //添加 var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == param); if (item == null) { item = new ToolStripMenuItem(param.Name.DefaultForEmpty("<未命名>")) { Tag = param }; item.Click += (x, y) => { var p = ((x as ToolStripMenuItem).Tag as QueryParam); p.IsLoaded = true; Session.UserProfile.QueryParams.SelectedQuery = p; MainForm.Instance.SelectedSession = Session; }; DropDownItems.Add(item); } _emptyItem.Visible = false; } else { //删除 var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == param); if (item != null) { DropDownItems.Remove(item); } _emptyItem.Visible = DropDownItems.OfType <ToolStripMenuItem>().All(s => s.Tag == null); } }