/// <summary> /// This thread-safe object goes through all the servers, pulling in values /// </summary> /// <param name="state"></param> private void ServerInformationUpdater(object state) { while (true) { foreach (Uri ServerURI in MMServerConnections.Keys.ToArray()) { MM_Administrator_Types Client = MMServerConnections[ServerURI]; ServerLinkedColumnHeader TargetCol = MMServers[ServerURI]; if (Client.State == CommunicationState.Opening) { SetColor(TargetCol, Color.Yellow); } else if (Client.State == CommunicationState.Faulted || Client.State == CommunicationState.Closed || Client.State == CommunicationState.Closing) { SetColor(TargetCol, Color.Red); } else { try { TargetCol.SysInfo = Client.GetSystemInformation(); TargetCol.Users = Client.GetUserInformation(); } catch (Exception ex) { SetColor(TargetCol, Color.Red); } } } Thread.Sleep(1000); } }