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ů
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);
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
Koncepty
Přehled asynchronních vzorů založených na událostech