/// <summary> /// Updates the visible <see cref="LogMessage"/>s. /// </summary> /// <param name="messages">The list of <see cref="LogMessage"/>s to display.</param> /// <param name="delta">The count of new <see cref="LogMessage"/>s.</param> public void LogMessagesChanged(List <LogMessage> messages, int delta) { if (InvokeRequired) { LogMessagesChangedDelegate updateDelegate = LogMessagesChanged; Invoke(updateDelegate, messages, delta); return; } try { dtgLogMessages.SelectionChanged -= DtgLogMessagesSelectionChanged; // Convert the list to an array to fix // accessing it while the enumeration is changed. UpdateInternalList(messages.ToArray()); } finally { dtgLogMessages.SelectionChanged += DtgLogMessagesSelectionChanged; } dtgLogMessages.Refresh(); }
/// <summary> /// Updates the visible <see cref="LogMessage"/>s. /// </summary> /// <param name="messages">The list of <see cref="LogMessage"/>s to display.</param> /// <param name="delta">The count of new <see cref="LogMessage"/>s.</param> public void LogMessagesChanged(List <LogMessage> messages, int delta) { if (InvokeRequired) { LogMessagesChangedDelegate updateDelegate = LogMessagesChanged; Invoke(updateDelegate, messages, delta); return; } try { tvLoggerTree.AfterSelect -= TvLoggerTreeAfterSelect; // We are only interessted in the delta, not all log messages. List <LogMessage> newLogMessages = delta < 0 ? messages : messages.GetRange(messages.Count - delta, delta); foreach (LogMessage message in newLogMessages) { PopulateTreeView( tvLoggerTree , Properties.Resources.strLoggerRoot + tvLoggerTree.PathSeparator + message.Logger); } } finally { tvLoggerTree.AfterSelect += TvLoggerTreeAfterSelect; } }