Postupy: Protokolování událostí pro vícevláknové komponenty
Při protokolování událostí z komponent s více podprocesy, důležité uplatnit.Je nutné zadat prostředek identifikace podproces, ze kterého událost pochází.Je nutné zajistit při protokolování událostí neomezují podprocesy navzájem.Další informace naleznete v tématu Protokoly událostí a vícevláknové komponenty.
Použití protokolů událostí ve víceprocesových aplikacích
Deklarovat a vytvořit v protokolu událostí.Další informace naleznete v tématu How to: Create and Remove Custom Event Logs.
Nastavit Name vlastnost každý podproces k jedinečný identifikátor.
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;
Vytvořit nový Source protokolu událostí a sadu Name na jedinečný řetězec hodnotu, která odpovídá podprocesu.Podrobné informace o vytváření Source, viz 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");
Nastavit Source vlastnost název podprocesu a volání v protokolu událostí WriteEntry metoda.
[!POZNÁMKA]
Je třeba získat výhradní zámek v protokolu událostí před provedením těchto operací.
' 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"); }
Viz také
Úkoly
Postupy: Koordinace více vláken provádění
Návod: Vytvoření jednoduché vícevláknové komponenty pomocí sady Visual Basic
Návod: Vytvoření jednoduché vícevláknové komponenty pomocí Visual C#
Referenční dokumentace
Další zdroje
How to: Create and Remove Custom Event Logs