Partager via


Comment : enregistrer des événements pour les composants multithread

Lors de l'enregistrement d'événements pour les composants multithread, des considérations spéciales entrent en jeu. Vous devez fournir un moyen d'identifier le thread à partir duquel l'événement a eu lieu. Vous devez également vous assurer que les threads n'interfèrent pas entre eux lors de l'enregistrement d'événements. Pour plus d'informations, consultez Journaux des événements et composants multithread.

Pour utiliser les journaux des événements dans des applications multithread

  1. Déclarez et créez le journal des événements. Pour plus d'informations, consultez How to: Create and Remove Custom Event Logs.

  2. Affectez un identificateur unique à la propriété Name de chaque thread.

    Dim X as Integer
    X = 0
    Dim MyThread as New Threading.Thread(AddressOf MyMethod)
    MyThread.Name = "Thread number " & X.ToString
    ' Increments X so no other threads will share the same name.
    X += 1
    
    int X;
    X = 0;
    Thread MyThread = new Thread(new 
       ThreadStart(MyMethod));
    MyThread.Name = "Thread Number " + X.ToString();
    // Increments X so no other threads will share the same name.
    X += 1;
    
  3. Créez Source pour le journal des événements et affectez à Name une valeur de chaîne unique correspondant au thread. Pour plus d'informations sur la création d'un Source, consultez How to: Add Your Application as a Source of Event Log Entries.

    Imports System.Threading
    ' Checks to see if there already is a source with the name of the 
    ' thread.
    If Not EventLog.SourceExists(Thread.CurrentThread.Name.ToString, _
       "myApplication") Then
       ' Creates a source with the name of the thread
       EventLog.CreateEventSource(Thread.CurrentThread.Name.ToString, _
          "MyApplication")
    End If
    
    // 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.
       EventLog.CreateEventSource(CurrentThread.Name.ToString(), 
          "MyApplication");
    
  4. Affectez à la propriété Source du journal des événements le nom du thread, puis appelez la méthode WriteEntry.

    Notes

    Assurez-vous d'obtenir un verrou exclusif sur le journal des événements avant de poursuivre ces opérations.

    ' Use the SyncLock keyword to obtain an exclusive lock on an object.
    SyncLock MyEventLog
      MyEventLog.Source = Thread.CurrentThread.Name.ToString
      EventLog.WriteEntry(Thread.CurrentThread.Name.ToString, _
         "Error in Widget 42")
    End SyncLock
    
    // Use the lock keyword to obtain an exclusive lock on an object
    lock(MyEventLog)
    {
      MyEventLog.Source = Thread.CurrentThread.Name.ToString();
      EventLog.WriteEntry(Thread.CurrentThread.Name.ToString(),
         "Error in Widget 42");
    }
    

Voir aussi

Tâches

How to: Create and Remove Custom Event Logs

How to: Write Entries to Event Logs

Comment : coordonner plusieurs threads d'exécution

Procédure pas à pas : création d'un composant simple multithread avec Visual Basic

Procédure pas à pas : création d'un composant simple multithread à l'aide de Visual C#

Référence

SyncLock, instruction

Autres ressources

Multithreading dans les composants