Condividi tramite


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

  1. Dichiarare e creare il log eventi. Per informazioni dettagliate, vedere Procedura: creare e rimuovere log eventi personalizzati.

  2. 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;
    
  3. 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 Procedura: aggiungere l'applicazione come origine delle voci del log eventi.

    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");
    
  4. 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: creare e rimuovere log eventi personalizzati

Procedura: scrivere voci nei log eventi

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

Istruzione SyncLock

Altre risorse

Multithreading nei componenti