// WARNING: Make sure this it the only method in this class, since // the method is not accessed by name. See below, call to // GetMethods. // This logs the actual events public void LoggerBase(Object[] objects) { if (_eventLog.InvokeRequired) { _eventLog.Invoke(new LoggerBaseHandler(LoggerBase), new object[] { objects }); } else { LoggerListViewItem li = new LoggerListViewItem(_objectEvent._eventInfo.Name); // Skip two frames and get the source information if available li._stackTrace = new StackTrace(2, true); li._objects = objects; li.Tag = _objectEvent; lock (_eventLog) { if (TraceUtil.If(this, TraceLevel.Info)) { Trace.Write(_objectEvent.ToString()); } _eventLog.Items.Add(li); _eventLog.EnsureVisible(_eventLog.Items.Count - 1); // Get correct incarnation number int incNo = TraceIncarnation(); // Build the event parameter string StringBuilder dataStr = new StringBuilder(); for (int i = 0; i < objects.Length; i++) { if (TraceUtil.If(this, TraceLevel.Info)) { Trace.Write(", " + objects[i]); } if (i > 0) { dataStr.Append(", "); } if (objects[i] != null) { // Using object.ToString seems to hang so use the type // name instead. //dataStr.Append(objects[i].ToString()); dataStr.Append(objects[i].GetType().FullName); } } TraceUtil.WriteLineInfo(this, ""); li.SubItems.Add(dataStr.ToString()); li.SubItems.Add(incNo.ToString()); li.SubItems.Add(DateTime.Now.ToString("HH:mm:ss.ff")); } } }
protected void GetDetailText() { DetailPanel.Clear(); if (SelectedItems.Count == 0) { return; } LoggerListViewItem li = (LoggerListViewItem)SelectedItems[0]; ObjectEvent oe = (ObjectEvent)li.Tag; DetailPanel.AddLink("Event", !ObjectBrowser.INTERNAL, 18, ObjMemberLinkHelper.OMLHelper, oe); // The event parameters // FIXME - add then in reverse order, the detail panel // seems to reverse them for (int i = li._objects.Length - 1; i >= 0; i--) { ParameterInfo p = oe._eventParams[i]; Object obj = li._objects[i]; if (obj != null) { if (!obj.GetType().IsValueType&& !(obj is String)) { DetailPanel.AddLink(p.Name, !ObjectBrowser.INTERNAL, 20, ObjLinkHelper.OLHelper, li._objects[i]); } else { DetailPanel.Add(p.Name, !ObjectBrowser.INTERNAL, 20, li._objects[i].ToString()); } } else { DetailPanel.Add(p.Name, !ObjectBrowser.INTERNAL, 20, ""); } } DetailPanel.Add("Incarnation", !ObjectBrowser.INTERNAL, 40, li.SubItems[INCARNATION].Text); DetailPanel.Add("Time", !ObjectBrowser.INTERNAL, 50, li.SubItems[TIME].Text); // Fixup the stack trace to display on detail panel StringBuilder stackTrace = new StringBuilder(li._stackTrace.ToString()); // Get rid of first newline stackTrace.Remove(0, 2); // And last newline stackTrace.Remove(stackTrace.Length - 2, 2); // And the tab in the front of the lines stackTrace.Replace("\tat ", ""); DetailPanel.Add("Stack Trace", !ObjectBrowser.INTERNAL, 60, stackTrace.ToString()); }
// WARNING: Make sure this it the only method in this class, since // the method is not accessed by name. See below, call to // GetMethods. // This logs the actual events public void LoggerBase(Object[] objects) { if (_eventLog.InvokeRequired) { _eventLog.Invoke(new LoggerBaseHandler(LoggerBase), new object[] {objects}); } else { LoggerListViewItem li = new LoggerListViewItem(_objectEvent._eventInfo.Name); // Skip two frames and get the source information if available li._stackTrace = new StackTrace(2, true); li._objects = objects; li.Tag = _objectEvent; lock (_eventLog) { if (TraceUtil.If(this, TraceLevel.Info)) Trace.Write(_objectEvent.ToString()); _eventLog.Items.Add(li); _eventLog.EnsureVisible(_eventLog.Items.Count - 1); // Get correct incarnation number int incNo = TraceIncarnation(); // Build the event parameter string StringBuilder dataStr = new StringBuilder(); for (int i = 0; i < objects.Length; i++) { if (TraceUtil.If(this, TraceLevel.Info)) Trace.Write(", " + objects[i]); if (i > 0) dataStr.Append(", "); if (objects[i] != null) { // Using object.ToString seems to hang so use the type // name instead. //dataStr.Append(objects[i].ToString()); dataStr.Append(objects[i].GetType().FullName); } } TraceUtil.WriteLineInfo(this, ""); li.SubItems.Add(dataStr.ToString()); li.SubItems.Add(incNo.ToString()); li.SubItems.Add(DateTime.Now.ToString("HH:mm:ss.ff")); } } }