Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

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.

    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.

    // 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.

    Remarque Remarque

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

    // 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");
    }
    
Afficher: