Co to jest procedura robocza ISynchronizeInvoke
?Jak korzystać z interfejsu ISynchronizeInvoke?
Jak pracować z nim w języku C#?
Co to jest procedura robocza ISynchronizeInvoke
?Jak korzystać z interfejsu ISynchronizeInvoke?
Jak pracować z nim w języku C#?
To w zasadzie opisuje drogę do pchania pracę pomiędzy wątkami; aby przepchnąć element pracy na inny wątek, użyj albo Invoke
(synchroniczny) albo BeginInvoke
(asynchroniczny - w idealnym przypadku wywołanie później EndInvoke
). Podobnie, InvokeRequired
jest używane do pytania "czy muszę to zrobić? Lub czy mogę wykonać pracę samodzielnie?".
Najczęstszym zastosowaniem tego interfejsu są formularze okien, w których jest to część przenoszenia pracy na wątek interfejsu użytkownika; możesz oczywiście używać tego samego, co jednak, ale formanty kontrolek implementują ten interfejs, aby umożliwić abstrakcję - więc kod źródłowy nie musi wiązać się z formularzami systemu Windows. W przypadku formularzy, InvokeRequired
oznacza "czy jestem wątkiem UI?".
W rzeczywistości nie jestem pewien, czy powszechne jest używanie go bezpośrednio. Częściej radzi sobie z zdarzeniami w interfejsie użytkownika, a interfejs użytkownika obsługuje przełączanie wątków za pomocą najbardziej odpowiedniego mechanizmu lokalnego.
Typowe zastosowanie:
obj.Invoke((MethodInvoker) SomeMethod);
który wykonuje (za pośrednictwem pełnomocnika) SomeMethod
na gwint zarządzanego przez obj
(który realizuje Interface).
Interfejs ISynchronizeInvoke synchroniczne i asynchroniczne komunikację między obiektami o wystąpieniu zdarzenia. Obiekty , które implementują ten interfejs, mogą uzyskać powiadomienie o zdarzeniu, które miało , i mogą odpowiadać na zapytania o dane zdarzenie z . W ten sposób klienci mogą upewnić się, że jedno żądanie zostało przetworzone przed przesłaniem kolejnego żądania, które zależy od ukończenia pierwszego żądania od .
Patrz także
http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx
Yap..i myślisz, że to może być używane do aktualizacji UI w głównym wątku za pomocą wątku tła logiki niższego poziomu? –
dzięki marc to świetna odpowiedź .. –
Niedawno obejrzałem bardzo łatwą implementację 'ISynchronizeInvoke' w połączeniu z bardzo prostą implementacją' IAsyncResult': http://gurkashi.blogspot.com/2011/01/hi-all- w tym-post-i-will-demon.html. Nie do hi-jack pytanie, ale zastanawiam się, czy teraz, z .NET 4.5 mogę używać async/czekać zamiast old-school wzór BeginInvoke z callbacks. Mimo że interfejs mówi "BeginInvoke", * pod maską * mogę zaimplementować z mojego 4.5 przybornika. – IAbstract