Aplikace s více podprocesy (C# a Visual Basic)
S Visual Basic a C#, můžete psát aplikace, které provádět více úloh současně.Úkoly s potenciálu hospodářství nahoru Další úkoly lze spustit v oddělené podprocesy proces označovaný jako multithreading nebo volného zřetězení.
Aplikace, které jsou použití multithreading rychleji reagovat na vstup, protože uživatelské rozhraní zůstane aktivní, jak spustit úlohy náročné na procesor, oddělené podprocesy uživatele.Podprocesy je také užitečné při vytváření škálovatelných aplikací, protože podprocesů lze přidat jako zvýšení pracovní zátěže.
[!POZNÁMKA]
Visual Studio 2010a .NET Framework 4 rozšiřují podporu paralelního programování poskytnutím nové runtime, nové typy knihoven třídy a nové diagnostické nástroje.Další informace naleznete v tématu Paralelní programování v rozhraní .NET Framework.
Pomocí komponenty BackgroundWorker
Nejspolehlivější způsob vytvoření aplikace s více podprocesy je použít BackgroundWorker komponent.Tato třída spravuje samostatný podproces vyhrazený pro zpracování metody, kterou určíte.Příklad naleznete v tématu Názorný postup: Multithreading s komponentou BackgroundWorker (C# a Visual Basic).
Chcete-li spustit operaci na pozadí, vytvořte BackgroundWorker a poslouchat události, jejichž průběh operace a signálu po dokončení operace.Můžete vytvořit BackgroundWorker programově objektu nebo jej můžete přetáhnout z formuláře součásti kartě nástrojů.Pokud vytvoříte BackgroundWorker v Návrhář formulářů, se zobrazí v Zásobník součást, a jeho vlastnosti jsou zobrazeny v Vlastnosti okna.
Nastavení pro operaci pozadí
Chcete-li nastavit pozadí operace přidání obslužné rutiny události pro DoWork událostí.V této obslužné rutiny události volání časově náročná operace.
Spuštění operace, volejte RunWorkerAsync.Chcete-li dostávat upozornění na aktualizace průběhu zpracování ProgressChanged událostí.Chcete-li se oznámení, když je operace dokončena, zpracování RunWorkerCompleted událostí.
Metody, které zpracovávají ProgressChanged a RunWorkerCompleted události přístup uživatelské rozhraní aplikace, protože tyto události jsou zaznamenávány v podprocesu, který se nazývá RunWorkerAsync metoda.Však DoWork obslužné rutiny události nemůže pracovat s objekty uživatelského rozhraní, protože je spuštěno na pozadí podprocesu.
Vytváření a používání podprocesů
Pokud potřebujete větší kontrolu nad chování podprocesů aplikace, můžete spravovat podprocesy sami.Si však uvědomit, že psaní správné podprocesy aplikací, může být obtížné: aplikace může přestat reagovat nebo dochází k přechodné chyby způsobené sporech.Další informace naleznete v tématu Součásti podprocesu.
Vytvořit nový podproces deklarováním proměnné typu Thread a volání konstruktoru názvem postup nebo metoda, která se má provést na nový podproces.Následující kód obsahuje příklad.
Dim newThread As New System.Threading.Thread(AddressOf AMethod)
System.Threading.Thread newThread =
new System.Threading.Thread(AMethod);
Spuštění a ukončení podprocesů
Spusťte nový podproces provádění pomocí Start způsob, jak je znázorněno v následujícím kódu.
newThread.Start()
newThread.Start();
Chcete-li zastavit provádění podprocesu, použijte Abort způsob, jak je znázorněno v následujícím kódu.
newThread.Abort()
newThread.Abort();
Kromě spuštění a ukončení podprocesů, je také možné pozastavit podprocesů voláním Sleep nebo Suspend metody obnovení pozastavené podproces pomocí Resume metoda a zničit vlákno pomocí Abort metoda
Podproces metody
Následující tabulka uvádí některé metody, které lze použít k řízení jednotlivé podprocesy.
Metoda |
Akce |
---|---|
Způsobí spuštění podprocesu. |
|
Pozastaví podproces pro zadaný čas. |
|
Pozastaví podproces dosáhne bezpečné místo. |
|
Ukončí podproces dosáhne bezpečné místo. |
|
Restartuje pozastavené podprocesu |
|
Způsobí, že aktuální podproces čekat na dokončení jiného podprocesu.Pokud se hodnota časového limitu, vrátí tato metoda True Pokud podproces dokončí v přidělený čas. |
Bezpečné bodů
Většina těchto metod je zřejmé, ale pojem bezpečné body může být nová.Bezpečné body jsou místa v kódu, kde je bezpečné pro společný jazykový modul runtime provádět automatické uvolněné, proces uvolnění proměnné a uvolní paměť.Při volání Abort nebo Suspend metoda podproces společného jazykového modulu runtime analyzuje kód a určuje umístění vhodné umístění pro podproces spouštění.
Vlastnosti podprocesu
Podprocesy také obsahují několik užitečných vlastností uvedených v následující tabulce:
Property |
Value |
---|---|
Obsahuje hodnotu True Pokud podproces je aktivní. |
|
Získá nebo nastaví logická hodnota označující, pokud podproces je nebo by měl být podprocesem na pozadí.Pozadí podprocesů jsou jako podprocesy v popředí, ale podprocesem na pozadí nebrání zastavení procesu.Po ukončení všech podprocesů popředí, které patří do procesu mají společný jazykový modul runtime ukončí proces voláním Abort metodu na pozadí podprocesů, které jsou stále naživu. |
|
Získá nebo nastaví název podproces.Nejčastěji používané při ladění zjistit jednotlivé podprocesy. |
|
Získá nebo nastaví hodnotu, která se používá ke stanovení priorit plánování podprocesů operačního systému. |
|
Získá nebo nastaví model podprocesu používaný pro konkrétní vlákno.Modely podprocesů jsou důležité při volání podprocesu nespravovaný kód. |
|
Obsahuje hodnotu, která popisuje stát nebo státy podprocesu. |
Priority podprocesu
Každý podproces má prioritu vlastnost určující zabírala řezu čas procesoru, které má provést.Operační systém přiděluje delší časové úseky s vysokou prioritou podprocesů a kratší časové úseky s nízkou prioritu podprocesů.Nové podprocesy jsou vytvořeny s hodnotou Normal, ale můžete změnit Priority vlastnost na hodnotu v ThreadPriority výčtu.
Viz ThreadPriority podrobný popis různých priority podprocesu.
Popředí a pozadí podprocesů
A popředí vlákno spustí po neomezenou dobu, zatímco podprocesem na pozadí zastaví, jakmile poslední popředí podproces byl zastaven.Můžete použít IsBackground vlastnost určit nebo změnit stav podprocesu na pozadí.
Multithreading s formuláře a ovládací prvky
Při multithreading nejlepší je vhodné postupy a metody třídy, můžete ji pomocí formuláře a ovládací prvky.Pokud tak učiníte, nezapomeňte následující body:
Kdykoli je to možné, spouštění metod řízení pouze v podprocesu, u kterého byl vytvořen.Pokud z jiného podprocesu musí volat metodu ovládacího prvku, je nutné použít Invoke volat metodu.
Nepoužívejte SyncLock (Visual Basic) nebo lock (C#) příkaz lock podprocesů pro manipulaci s ovládacích prvků nebo formulářů.Protože metody ovládacích prvků formuláře a někdy zpětné volání a volání procedury, lze ukončit až neúmyslnému vytváření zablokování – situace, ve které oba podprocesy čekat další uvolnění uzamčení, způsobuje zablokování aplikace.
Viz také
Referenční dokumentace
Podproces synchronizace (C# a Visual Basic)
Koncepty
Parametry a vrácené hodnoty procedury s více podprocesy (C# a Visual Basic)