Porady: manipulowanie kontrolkami pochodzącymi z wątków
BackgroundWorker Składnika zastępuje i dodaje funkcje do BeginInvoke metody; Jednakże BeginInvoke metoda jest zachowywana zarówno dla zgodności z poprzednimi wersjami i wykorzystania w przyszłości, jeśli wybierzesz.Aby uzyskać więcej informacji, zobacz BackgroundWorker — Informacje o składniku.
Multithreading jest najlepiej uruchomione moduły klas procesor procedur.W przeciwieństwie do innych składników są problemy z bezpośredniego wywoływania metody formantów z oddzielnych wątków.Metody, które wpływają na kontrole powinien być wykonywany tylko w wątku, w którym został utworzony formant.Ponieważ przechodzących połączeń z jednego wątku i wysyłanie ich granicami wątku na inny jest bardzo kosztowne w odniesieniu do zasobów systemu, należy unikać wielokrotnie wywołań kontroli innych wątków.W najlepszym bezpośrednich połączeń z innych wątków są drogie i poniósłby wydajność aplikacji.W najgorszym przypadku warunki może wystąpić powodujących zakleszczenia w aplikacji, zamrożenie wykonanie.
Jednak może być zmieniana, kiedy chcesz wywołać metody kontroli z wątkom.Na przykład może wywołać metodę, która wyłącza przycisk lub aktualizuje ekran formularza w odpowiedzi na działania podjęte przez wątek..NET Framework dostarcza metod, które są bezpieczne wymagają od żadnego wątku wywoływanie metod, które współdziałają z formantów przez inne wątki.Invoke Metoda umożliwia synchronicznej metod kontroli, należy BeginInvoke metoda Inicjuje asynchroniczne wykonanie.Aby użyć tych metod, należy zadeklarować pełnomocnik z samych sygnaturach można będzie wywoływanie metody.Następnie można wywołać Invoke lub BeginInvoke metody dowolny formant w formularzu, poprzez dostarczanie odpowiednich pełnomocnictw chcesz wywołać metodę.Wszystkie wymagane parametry są zapakowane w Object i przekazywane do metody.
Wywoływanie metod obejmujących kontrole własnością innych wątków
Pełnomocnik podpisem należy zadeklarować identyczne metody, którą chcesz wywołać.
Poniższy przykład ilustruje sposób deklarowania pełnomocnik z Integer i String parametry.
Public Delegate Sub myDelegate(ByVal anInteger as Integer, ByVal _ aString as String)
public delegate void myDelegate(int anInteger, string aString);
Każdy formant do wywołania metody manipulujące formanty własnością innych wątków.
[!UWAGA]
Parametry (jeśli są) wymagane przez metody mogą być dostarczane wewnątrz Object.
Jeśli chcesz wywołać metody synchronicznie, wywołanie Metody elementu Control.Invoke.
Label1.Invoke(New myDelegate(AddressOf myMethod), New _ Object() {1, "This is the string"})
Label1.Invoke(new myDelegate(myMethod), new Object[] {1, "This is the string"});
Jeśli chcesz wywołać metody asynchronicznie wywołanie Metoda Control.BeginInvoke.
Label1.BeginInvoke(New myDelegate(AddressOf myMethod), _ New Object() {1, "This is the string"})
Label1.BeginInvoke(new myDelegate(myMethod), new Object[] {1, "This is the string"});
Zobacz też
Zadania
Wskazówki: tworzenie prostego składnika wielowątkowego za pomocą języka Visual Basic
Wskazówki: tworzenie prostego składnika wielowątkowego za pomocą języka C#
Informacje
Koncepcje
Asynchroniczny wzorzec oparty na zdarzeniach — przegląd