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
Déclarez et créez le journal des événements. Pour plus d'informations, consultez How to: Create and Remove Custom Event Logs.
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;
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");
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#