Sdílet prostřednictvím


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

ck8bc5c6.collapse_all(cs-cz,VS.110).gifSpuš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

ck8bc5c6.collapse_all(cs-cz,VS.110).gifPodproces metody

Následující tabulka uvádí některé metody, které lze použít k řízení jednotlivé podprocesy.

Metoda

Akce

Start

Způsobí spuštění podprocesu.

Sleep

Pozastaví podproces pro zadaný čas.

Suspend

Pozastaví podproces dosáhne bezpečné místo.

Abort

Ukončí podproces dosáhne bezpečné místo.

Resume

Restartuje pozastavené podprocesu

Join

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.

ck8bc5c6.collapse_all(cs-cz,VS.110).gifBezpeč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í.

ck8bc5c6.collapse_all(cs-cz,VS.110).gifVlastnosti podprocesu

Podprocesy také obsahují několik užitečných vlastností uvedených v následující tabulce:

Property

Value

IsAlive

Obsahuje hodnotu True Pokud podproces je aktivní.

IsBackground

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.

Name

Získá nebo nastaví název podproces.Nejčastěji používané při ladění zjistit jednotlivé podprocesy.

Priority

Získá nebo nastaví hodnotu, která se používá ke stanovení priorit plánování podprocesů operačního systému.

ApartmentState

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.

ThreadState

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)

Invoke

InvokeRequired

Thread

Koncepty

Parametry a vrácené hodnoty procedury s více podprocesy (C# a Visual Basic)

Další zdroje

Multithreading v součásti

Vytvoření podprocesu pomocí aplikace Visual C#