예제 #1
0
 public override string ToString()
 {
     if (asString == null)
     {
         asString = TraceType.ShortString() + Created.ToString(" HH:mm:ss.fff ") + Message;
     }
     return(asString);
 }
예제 #2
0
        private static void enqueueMessage(TraceTypeEnum traceType, string?filterText, ref string?threadMessageBuffer)
        {
      #if RealTimeTraceing
            RealTimeTracer.Trace("enqueueMessage(): start " + traceType.ShortString() + ": " + threadMessageBuffer);
      #endif
            TraceMessage message = new TraceMessage(traceType, threadMessageBuffer !, filterText);
            threadMessageBuffer = null;

            //break in debugger if needed
            if (Debugger.IsAttached)
            {
                if ((traceType == TraceTypeEnum.Warning && IsBreakOnWarning) ||
                    (traceType == TraceTypeEnum.Error && IsBreakOnError) ||
                    (traceType == TraceTypeEnum.Exception && IsBreakOnException))
                {
                    Debug.WriteLine(traceType + ": " + message);
                    Debugger.Break();
                }
            }

      #if RealTimeTraceing
            RealTimeTracer.Trace("enqueueMessage(): lock messagesQueue");
      #endif
            lock (messagesQueue){
        #if RealTimeTraceing
                RealTimeTracer.Trace("enqueueMessage(): locked messagesQueue");
        #endif
                if (messagesQueue.Count >= MaxMessageQueue - 1) //leave 1 space empty for overflow error message
                {
          #if RealTimeTraceing
                    RealTimeTracer.Trace("enqueueMessage(): messagesQueue overflow (" + messagesQueue.Count + " messages)");
          #endif
                    if (!isMessagesQueueOverflow)
                    {
                        isMessagesQueueOverflow = true;
                        messagesQueue.Enqueue(new TraceMessage(TraceTypeEnum.Error, "Tracer.enqueueMessage(): MessagesQueue overflow (" + messagesQueue.Count + " messages) for:" +
                                                               Environment.NewLine + message.ToString()));
                    }
                }
                else
                {
                    isMessagesQueueOverflow = false;
                    messagesQueue.Enqueue(message);
          #if RealTimeTraceing
                    RealTimeTracer.Trace("enqueueMessage(): message added to messagesQueue");
          #endif
                }
                //Monitor.Pulse(messagesQueue);
        #if RealTimeTraceing
                RealTimeTracer.Trace("enqueueMessage(): messagesQueue pulsed, release lock");
        #endif
            }
      #if RealTimeTraceing
            RealTimeTracer.Trace("enqueueMessage(): messagesQueue lock released, end");
      #endif
        }