How to: Log Events for Multithreaded Components

When logging events from multithreaded components, special considerations come into play. You must supply a means of identifying the thread from which the event came. You must also ensure that the threads do not interfere with one another when logging events. For details, see Event Logs and Multithreaded Components.

To use event logs in multithreaded applications

  1. Declare and create the event log. For details, see How to: Create and Remove Custom Event Logs.

  2. Set the Name property of each thread to a unique identifier.

    int X;
    X = 0;
    Thread MyThread = new Thread(new 
    MyThread.Name = "Thread Number " + X.ToString();
    // Increments X so no other threads will share the same name.
    X += 1;
  3. Create a new Source for the event log, and set the Name to a unique string value that corresponds to the thread. For details on creating a Source, see How to: Add Your Application as a Source of Event Log Entries.

    // These lines go at the top of the code
    using System.Threading;
    using System.Diagnostics;
    // Checks to see if there already is a source with the name of the 
    // thread.
    if (!EventLog.SourceExists(CurrentThread.Name.ToString()))
       // Creates a source with the name of the thread.
  4. Set the Source property of the event log to the name of the thread and call the WriteEntry method.

    Note Note

    Be sure to obtain an exclusive lock on the event log before proceeding with these operations.

    // Use the lock keyword to obtain an exclusive lock on an object
      MyEventLog.Source = Thread.CurrentThread.Name.ToString();
         "Error in Widget 42");