Gewusst wie: Protokollieren von Ereignissen für Multithreadkomponenten
Aktualisiert: November 2007
Beim Protokollieren von Ereignissen aus Multithreadkomponenten müssen einige Besonderheiten beachtet werden. Sie müssen einen Weg finden, um den Thread, aus dem das Ereignis stammt, zu identifizieren. Darüber hinaus müssen Sie sicherstellen, dass die Threads sich beim Protokollieren von Ereignissen nicht gegenseitig beeinflussen. Ausführliche Informationen finden Sie unter Ereignisprotokolle und Multithreadkomponenten.
So verwenden Sie Ereignisprotokolle in Multithreadanwendungen
Deklarieren und erstellen Sie das Ereignisprotokoll. Ausführliche Informationen finden Sie unter Gewusst wie: Erstellen und Entfernen benutzerdefinierter Ereignisprotokolle.
Legen Sie für die Name-Eigenschaft jedes Threads einen eindeutigen Bezeichner fest.
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;
Erstellen Sie eine neue Source für das Ereignisprotokoll, und legen Sie für Name einen eindeutigen Zeichenfolgenwert fest, der mit dem Thread übereinstimmt. Ausführliche Informationen zum Erstellen einer Source finden Sie unter Gewusst wie: Hinzufügen der Anwendung als Quelle für Ereignisprotokolleinträge.
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");
Legen Sie für die Source-Eigenschaft des Ereignisprotokolls den Namen des Threads fest, und rufen Sie die WriteEntry-Methode auf.
Hinweis: Sie müssen eine exklusive Sperre für das Ereignisprotokoll erhalten, bevor Sie diese Operationen fortsetzen.
' 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"); }
Siehe auch
Aufgaben
Gewusst wie: Erstellen und Entfernen benutzerdefinierter Ereignisprotokolle
Gewusst wie: Schreiben von Einträgen in Ereignisprotokolle
Gewusst wie: Koordinieren mehrerer Ausführungsthreads
Exemplarische Vorgehensweise: Erstellen einer einfachen Multithreadkomponente mit Visual Basic
Exemplarische Vorgehensweise: Erstellen einer einfachen Multithreadkomponente mit Visual C#