void OnInstanceUpdated(MemCacheDManager.Business.Server server, MemCacheDManager.Business.Instance instance, MemCacheDManager.Business.InstanceStatistics instanceStatistics) { Business.InstanceStatistics targetStatistics = _instanceStatistics.Find(new Predicate <MemCacheDManager.Business.InstanceStatistics>(delegate(MemCacheDManager.Business.InstanceStatistics testValue) { return(testValue.Instance == instance); })); if (targetStatistics != null) { _instanceStatistics[_instanceStatistics.IndexOf(targetStatistics)] = instanceStatistics; } else { _instanceStatistics.Add(instanceStatistics); } if (this.InvokeRequired == true) { if (_isFormClosing == false) { this.Invoke(new UpdateInstanceStatisticsDelegate(delegate(List <Business.InstanceStatistics> updateStatistics) { UpdateInstanceStatistics(updateStatistics); }), new object[] { _instanceStatistics }); } } else { UpdateInstanceStatistics(_instanceStatistics); } }
// This is a seperate method so that it can be called via invoke and non-invoke methods. private void UpdateInstanceStatistics(List <Business.InstanceStatistics> updateStatistics) { string memcachedBinaryVersion = null; if (File.Exists(Configuration.Default.MemcachedBinarySource) == true) { memcachedBinaryVersion = FileVersionInfo.GetVersionInfo(Configuration.Default.MemcachedBinarySource).FileVersion; } BindingSource bs = new BindingSource(); bs.DataSource = updateStatistics; dgvStatus.DataSource = bs; foreach (TreeNode serverNode in tvManager.Nodes) { if (serverNode.Nodes.Count > 0) { Business.StatusIconIndex serverNodeIconIndex = Business.StatusIconIndex.Up; string serverNodeTooltip = Constants.TooltipUp; foreach (TreeNode instanceNode in serverNode.Nodes) { Business.StatusIconIndex instanceNodeIconIndex = Business.StatusIconIndex.Up; string instanceNodeTooltip = Constants.TooltipUp; Business.InstanceStatistics targetStatistics = updateStatistics.Find(new Predicate <MemCacheDManager.Business.InstanceStatistics>(delegate(Business.InstanceStatistics compareStatistics) { return(compareStatistics.Instance == (Business.Instance)instanceNode.Tag); })); if (targetStatistics != null) { instanceNodeIconIndex = targetStatistics.StatusIconIndex; instanceNodeTooltip = targetStatistics.StatusTooltip; } if (instanceNodeIconIndex == Business.StatusIconIndex.NeedsUpdate && serverNodeIconIndex == Business.StatusIconIndex.Up) { serverNodeIconIndex = instanceNodeIconIndex; serverNodeTooltip = instanceNodeTooltip; } if (instanceNodeIconIndex == Business.StatusIconIndex.ServiceDown && (serverNodeIconIndex == Business.StatusIconIndex.Up || serverNodeIconIndex == Business.StatusIconIndex.NeedsUpdate)) { serverNodeIconIndex = instanceNodeIconIndex; serverNodeTooltip = instanceNodeTooltip; } if (instanceNodeIconIndex == Business.StatusIconIndex.CommunicationError && (serverNodeIconIndex == Business.StatusIconIndex.Up || serverNodeIconIndex == Business.StatusIconIndex.NeedsUpdate || serverNodeIconIndex == Business.StatusIconIndex.ServiceDown)) { serverNodeIconIndex = instanceNodeIconIndex; serverNodeTooltip = instanceNodeTooltip; } if (instanceNodeIconIndex == Business.StatusIconIndex.ServiceNonControllable && (serverNodeIconIndex == Business.StatusIconIndex.Up || serverNodeIconIndex == Business.StatusIconIndex.NeedsUpdate || serverNodeIconIndex == Business.StatusIconIndex.ServiceDown || serverNodeIconIndex == Business.StatusIconIndex.CommunicationError)) { serverNodeIconIndex = instanceNodeIconIndex; serverNodeTooltip = instanceNodeTooltip; } instanceNode.ImageIndex = (int)instanceNodeIconIndex; instanceNode.SelectedImageIndex = (int)instanceNodeIconIndex; instanceNode.ToolTipText = instanceNodeTooltip; } serverNode.ImageIndex = (int)serverNodeIconIndex; serverNode.SelectedImageIndex = (int)serverNodeIconIndex; serverNode.ToolTipText = serverNodeTooltip; } else { serverNode.ImageIndex = (int)Business.StatusIconIndex.Empty; serverNode.SelectedImageIndex = (int)Business.StatusIconIndex.Empty; serverNode.ToolTipText = Constants.TooltipEmpty; } } }