Sdílet prostřednictvím


Postupy: Manipulace s ovládacími prvky z vláken

BackgroundWorker Nahrazuje součásti a funkce přidá BeginInvoke metoda; však BeginInvoke metoda je zachována z důvodu zpětné kompatibility a budoucí použití rozhodnete.Další informace naleznete v tématu BackgroundWorker – přehled komponenty.

Podprocesy je nejvhodnější pro náročné postupy moduly tříd systémem.Na rozdíl od jiných komponent jsou problémy s přímo v ovládacích prvcích volání metod z oddělené podprocesy.Metody, které mají vliv na ovládací prvky by měly provést pouze v podprocesu vytvoření ovládacího prvku.Meziprocesové předávání volání z jednoho podprocesu a odesílání přes hranice podprocesu do jiného je velmi nákladné, systémových prostředcích, neměli byste opakovaně volání na ovládací prvky v jiných podprocesů.Nejlépe přímé volání z jiných podprocesů jsou drahé a utrpí výkon aplikace.V nejhorším případě může dojít podmínky, které způsobit zablokování aplikace zmrazení spuštění.

Ale může být příležitostech, když chcete volat metody ovládací prvky z vaší podprocesů.Je například volat metodu, která zakáže tlačítko nebo aktualizuje zobrazení formuláře v odezvě na akci, kterou podproces.Rozhraní.NET Framework poskytuje metody, které jsou bezpečné pro volání z jakékoli vlákno pro vyvolání metody, které spolupracují s ovládacími prvky ve vlastnictví jiných podprocesů.Invoke Metoda umožňuje synchronní spuštění metody v ovládacích prvcích, že BeginInvoke metoda Iniciuje asynchronní provádění.Pomocí těchto metod, musíte deklarovat delegáta s stejný podpis jako metodu, kterou bude volání.Potom můžete volat Invoke nebo BeginInvoke metoda libovolného ovládacího prvku formuláře poskytováním vhodných delegát chcete volat metodu.Všechny požadované parametry jsou zabaleny do Object a metody.

K vyvolání metody zahrnující ovládací prvky ve vlastnictví jiných podprocesů

  1. Delegáta s podpisem Deklarujte metodu, kterou chcete vyvolat shodné.

    Následující příklad ukazuje, jak deklarovat delegáta s Integer a String parametry.

    Public Delegate Sub myDelegate(ByVal anInteger as Integer, ByVal _
       aString as String)
    
    public delegate void myDelegate(int anInteger, string aString);
    
  2. Použijte libovolný ovládací prvek k vyvolání metody umožňující pracovat s prvky ve vlastnictví jiných podprocesů.

    [!POZNÁMKA]

    Lze zadat parametry (pokud existuje) vyžadované metody uvnitř Object.

    • Pokud chcete vyvolat metody synchronně, zavolejte Metoda funkce 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"});
      
    • Pokud chcete vyvolat metody asynchronně, zavolejte Control.BeginInvoke metody.

      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"});
      

Viz také

Úkoly

Návod: Vytvoření jednoduché vícevláknové komponenty pomocí sady Visual Basic

Návod: Vytvoření jednoduché vícevláknové komponenty pomocí Visual C#

Referenční dokumentace

BackgroundWorker

Koncepty

Přehled asynchronních vzorů založených na událostech

Další zdroje

Použití více vláken v komponentách