Procedura: registrare eventi per componenti multithreading
Durante la registrazione degli eventi da componenti multithreading è necessario tenere presente alcune particolari considerazioni. È necessario fornire un metodo per identificare il thread di provenienza dell'evento e, durante la registrazione degli eventi, impedire eventuali interferenze tra i thread. Per informazioni dettagliate, vedere Log eventi e componenti multithreading.
Per utilizzare i log eventi nelle applicazioni multithreading
Dichiarare e creare il log eventi. Per informazioni dettagliate, vedere How to: Create and Remove Custom Event Logs.
Impostare la proprietà Name di ciascun thread su un identificatore univoco.
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;
Creare una nuova proprietà Source per il log eventi e impostare la proprietà Name su un valore stringa univoco corrispondente al thread. Per informazioni dettagliate sulla creazione di Source, vedere 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");
Impostare la proprietà Source del log eventi sul nome del thread e chiamare il metodo WriteEntry.
Nota
Assicurarsi di ottenere un blocco esclusivo sul log eventi prima di continuare con queste operazioni.
' 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"); }
Vedere anche
Attività
Procedura: coordinare più thread di esecuzione
Procedura dettagliata: modifica di componenti multithreading semplici con Visual Basic
Procedura dettagliata: modifica di componenti multithreading semplici con Visual C#
Riferimenti
Altre risorse
How to: Create and Remove Custom Event Logs