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

  1. 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);
    
  2. 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

BackgroundWorker

Koncepcje

Asynchroniczny wzorzec oparty na zdarzeniach — przegląd

Inne zasoby

Wielowątkowość w składnikach