2009-06-16 13 views
5

W VB .NET, po wywołaniu RaiseEvent X(), jest funkcja, która obsługuje przetwarzane zdarzenie X asynchronicznie lub synchronicznie. Miałem wrażenie, że RaiseEvent i przetwarzanie zdarzenia były Synchroniczne, chyba że zostały stworzone explicite w innym wątku. Powiedziano mi jednak, że jest inaczej.Czy obsługa zdarzeń jest przetwarzana asynchronicznie?

Odpowiedz

6

Zdarzenia są domyślnie synchronizowane. Od MulticastDelegates są zaprojektowane do obsługi asynchronicznego wywoływania, możliwe jest asynchroniczne wywoływanie delegatów na liście wywołań zdarzenia, ale nie jest to zachowanie domyślne.

2

Właśnie zrobiłem kilka testów również ...

Public Sub MyHandler() Handles Complete 
    MsgBox("My Handler - Beginning 5 second sleep") 
    Threading.Thread.Sleep(5000) 
    MsgBox("My Handler - Awoken") 
End Sub 


Public Sub SomeFunction() 
    MsgBox("Some function - Raising Event") 
    RaiseEvent Complete() 
    MsgBox("Some function - After Event") 
End Sub 

wyjściowa:
Niektóre funkcje - Raising Event
Moja Handler - Początek 5 sekund sen
Moja Handler - obudzony
Niektóre funkcje - Po Wydarzenie

Powiązane problemy