/// <summary> /// Loads entries. /// </summary> private void LoadEntries() { lock (this) { // Update the include and exclude regular expressions. UpdateIncludeExcludeRegex(); // Obtain the set of new entries we don't already have. BufferingTraceListenerEntry[] bufferingTraceListenerEntryArray = bufferingTraceListener.GetEntries(ref lastEventIndex); if (bufferingTraceListenerEntryArray == null || bufferingTraceListenerEntryArray.Length == 0) { return; } // A long operation to follow, so prevent updates. listViewLog.SuspendLayout(); listViewLog.BeginUpdate(); // Add the new entries. foreach (BufferingTraceListenerEntry bufferingTraceListenerEntry in bufferingTraceListenerEntryArray) { // Check the include regex, if there is one. Exclude the entry as needed. if (includeRegex != null) { if (!includeRegex.IsMatch(bufferingTraceListenerEntry.Category + " " + bufferingTraceListenerEntry.Text)) { continue; } } // Check the exclude regex, if there is one. Exclude the entry as needed. if (excludeRegex != null) { if (excludeRegex.IsMatch(bufferingTraceListenerEntry.Category + " " + bufferingTraceListenerEntry.Text)) { continue; } } // Sequence number. ListViewItem.ListViewSubItem listViewSubItemSequenceNumber = new ListViewItem.ListViewSubItem(); listViewSubItemSequenceNumber.Text = bufferingTraceListenerEntry.SequenceNumberString; listViewSubItemSequenceNumber.Font = itemFont; // Time. ListViewItem.ListViewSubItem listViewSubItemTime = new ListViewItem.ListViewSubItem(); listViewSubItemTime.Text = bufferingTraceListenerEntry.DateTimeString; listViewSubItemTime.Font = itemFont; // Category. ListViewItem.ListViewSubItem listViewSubItemCategory = new ListViewItem.ListViewSubItem(); listViewSubItemCategory.Text = bufferingTraceListenerEntry.Category; listViewSubItemCategory.Font = itemFont; // Determine the text to display and the color. string text; Color color; if (bufferingTraceListenerEntry.Category == ErrText.FailText) { color = Color.Red; text = String.Format(CultureInfo.InvariantCulture, "{0} {1}", bufferingTraceListenerEntry.Text, StackTraceText); } else { color = SystemColors.WindowText; text = bufferingTraceListenerEntry.Text; } // Make multi-line text pretty. text.Replace('\r', ' '); text.Replace('\n', ' '); // Text. ListViewItem.ListViewSubItem listViewSubItemText = new ListViewItem.ListViewSubItem(); listViewSubItemText.Text = text; listViewSubItemText.Font = itemFont; ListViewItem.ListViewSubItem[] listViewSubItemArray = new ListViewItem.ListViewSubItem[] { listViewSubItemSequenceNumber, listViewSubItemTime, listViewSubItemCategory, listViewSubItemText }; // Add the item. ListViewItem listViewItem = new ListViewItem(listViewSubItemArray, -1); listViewItem.Tag = bufferingTraceListenerEntry; listViewItem.ForeColor = color; listViewLog.Items.Add(listViewItem); } // Scroll to the bottom. if (listViewLog.Items.Count > 0) { listViewLog.EnsureVisible(listViewLog.Items.Count - 1); } // Re-enable updates. listViewLog.EndUpdate(); listViewLog.ResumeLayout(); } }
public BufferingTraceListenerEntry[] GetLogBuffer() { int count = 0; return(bufferingTraceListener.GetEntries(ref count)); }