public void TraceTransfer(int id, string message, Guid relatedActivityId)
{
// Ensure that config is loaded
Initialize();
TraceEventCache manager = new TraceEventCache();
if (_internalSwitch.ShouldTrace(TraceEventType.Transfer) && _listeners != null)
{
if (TraceInternal.UseGlobalLock)
{
// we lock on the same object that Trace does because we're writing to the same Listeners.
lock (TraceInternal.critSec)
{
for (int i = 0; i < _listeners.Count; i++)
{
TraceListener listener = _listeners[i];
listener.TraceTransfer(manager, Name, id, message, relatedActivityId);
if (Trace.AutoFlush)
{
listener.Flush();
}
}
}
}
else
{
for (int i = 0; i < _listeners.Count; i++)
{
TraceListener listener = _listeners[i];
if (!listener.IsThreadSafe)
{
lock (listener)
{
listener.TraceTransfer(manager, Name, id, message, relatedActivityId);
if (Trace.AutoFlush)
{
listener.Flush();
}
}
}
else
{
listener.TraceTransfer(manager, Name, id, message, relatedActivityId);
if (Trace.AutoFlush)
{
listener.Flush();
}
}
}
}
}
}