Udostępnij za pośrednictwem


Zdarzenia dziennika i składniki wielowątkowe

Dzienniki zdarzeń są do śledzenia danych istotnych zdarzeń, gdy aplikacja jest uruchomiona.Dzienniki zdarzeń można rejestrować informacje, które może być przydatne do rozwiązywania problemów lub wykonania analizy.Podczas rejestrowania zdarzeń składników wielowątkowe istnieją dodatkowe zagadnienia.Po pierwsze musi być mechanizm rejestrowania tożsamości wątku rejestrowania wiadomości.Po drugie bezpieczeństwo wątków musi brane pod uwagę podczas interakcji z dziennika zdarzeń.Wątek próbuje zapisać wiadomość musi uzyskać blokadę wyłączności dziennika w celu uniknięcia wyścigu.Omówienie dzienników zdarzeń, zobacz Administrowanie dziennikami zdarzeń.Więcej informacji o bezpieczeństwo wątków, zobacz Wielowątkowość składników.

Aby zidentyfikować każdego wątku, należy ustawić Właściwość Thread.Name.Ta właściwość przyjmuje i zwraca String wartość i mogą być używane do ustawiania identyfikator unikatowy dla każdego wątku.Tę wartość można następnie przekazać do Metoda EventLog.CreateEventSource do wyznaczenia wątku jako Źródło zdarzenia dla każdego wątku.Podczas rejestrowania zdarzeń, można ustawić wątek Source właściwość dziennik zdarzeń i jego nazwa, zapewniając dokładne rejestrowanie zdarzeń.

Wykonywanie wielu linii kodu w środowisku wielowątkowym, jest ważne, że wątki uzyskać wyłącznego blokad w dzienniku zdarzeń, przed wykonaniem jakiegokolwiek kodu.Na przykład rozważmy następujące wiersze kod wykonywany w środowisku wielowątkowym:

MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString
EventLog.WriteEntry("What thread did this come from?", "myApplication")
MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString();
EventLog.WriteEntry("What thread did this come from?", "myApplication");

Jeśli wiele wątków są wykonywane te wiersze równocześnie, jeśli jest możliwe zmienianie jeden wątek Właściwość EventLog.Source dziennika zdarzeń i innego wątku pisać wiadomości, po zmianie właściwości.W celu uniknięcia warunków tego, można użyć Instrukcji SyncLock (Visual Basic) lub lock instrukcji (C#) do uzyskania blokadę wyłączności na obiekt przed wykonaniem kodu z wielu wątków.Blokowania, poprzedni przykład teraz wyglądałoby następująco:

SyncLock MyEventLog
   MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString
   EventLog.WriteEntry("What thread did this come from?", "myApplication")
End SyncLock
lock(MyEventLog)
{
   MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString();
   EventLog.WriteEntry("What thread did this come from?", 
      "myApplication");
}

Można również użyć Debug i Trace klasy do dziennika zdarzeń w wielowątkowych aplikacji.Te klasy są statyczne klasy, które pozwalają wysłać dane wyjściowe do okna wyjściowego, okna konsoli, pliku tekstowego lub dziennik zdarzeń lub innej liczby obiektów.Aby uzyskać szczegółowe informacje, zobacz Śledzenie i instrumentacji aplikacji w języku Visual Basic i Visual C#.

Zobacz też

Zadania

Porady: zdarzenia dziennika dotyczące składników wielowątkowych

Inne zasoby

Wielowątkowość w składnikach