Net, a teremtés másodlagos áramlások
Amikor a program létrehozását további szálak elvégzésére munkaegység követendő szigorúan szabályozott folyamatok:
Hozzon létre egy módszert, amely a belépési pont az új téma.
Hozzon létre egy objektumot szál halad érvként ParametrizedThreadStart / ThreadStart tervezők.
Állítsa be a kezdeti áramlási jellemzőit (név, elsőbbségi, stb.)
Ok Thread.Start () módszer. Ez elindítja a patak mellett a módszer, hogy a megadott küldötte létre a második lépésben a lehető leghamarabb.
A második lépésben, lehetőség van arra, hogy két különböző típusú küldöttek „jelzések” módszer, amely elvégzi a szekunder áramlási. Küldött ThreadStart utal, hogy a System.Threading névtér, mivel a .NET 1.0 és akkor utalni kell minden olyan eljárás, amely nem veszi az érveket, és visszatér semmit. A megbízott akkor hasznos, ha a módszer egyszerűen fut a háttérben minden további nélkül kölcsönhatást.
ThreadStart természetes korlát miatt képtelenek át úgy paraméterek, akkor feldolgozásra. Mindazonáltal ParametrizedThreadStart küldött típus lehetővé teszi, hogy küldjön egy típusú paramétert System.Object. Tekintettel arra, hogy a System.Object tűnik semmit, akkor át tetszőleges számú paramétert egy speciális osztály vagy struktúra. Azonban ne feledje, hogy ParametrizedThreadStart megbízottja csak mutatni elemfüggvényei érvénytelen.
megbízottja ThreadStart
Annak illusztrálására, hogy építése során a többszálú alkalmazás (valamint mellette), feltételezzük, hogy van egy konzolos alkalmazás, amely lehetővé teszi a felhasználó számára, hogy válasszon az alkalmazás végezni munkájukat egyetlen primer áramlási vagy terjeszteni a megterhelést jelent a két különböző végrehajtási szál.
Miután import névtér System.Threading következő lépés annak meghatározása eljárás végző művelet (potenciális) a másodlagos áramlást. Összpontosítani a mechanizmus építése többszálú programok, ez a módszer csak megjelenik a konzol egy számsorozat, megállt körülbelül 2 másodpercig minden egyes lépésnél. A teljes osztály definíciója:
Bent a Main () az első, a felhasználónak meg kell dönteni, hogy hány szálat kell használni az alkalmazás futtatására, egy vagy kettő. Ha a felhasználó kéri egy patak, meg kell egyszerűen okozni ThreadNumbers () metódus az elsődleges áramlását. Ha a felhasználó inkább a két áram, akkor létre kell hozni egy ThreadStart küldött, jelezve ThreadNumbers (), át küldött tárgy a kivitelező az új szál objektumot, és hívja meg a Start () metódus, hogy tájékoztassa a CLR, hogy ez az anyag készen áll a feldolgozásra.
Ha most fut a program egy szál, azt találjuk, hogy az utolsó üzenet doboz nem jelenik meg, amíg a teljes számsor nem jelenik meg a konzolon. Mivel megkötése után minden Szünetkép körülbelül 2 másodpercig, akkor nem túl jó felhasználói élményt. Azonban, ha kiválaszt két üzenet ablak jelenik meg áramlik azonnal, hiszen a kiadási számokat a konzolra kiosztott egy külön egyedi tárgy téma:
Gyakran előfordul, hogy egy többszálú program megköveteli, hogy a fő stream volt az utolsó szál befejezi annak végrehajtását. Formálisan, a program tovább fut, amíg nem fejeződik be az összes kiemelt forgalmat. Ezért van szükség, hogy a fő szál befejezi a programot, ez nem szükséges. Ez a szabály azonban venni, hogy tartsák be a többszálú programozás, mert egyértelműen meghatározza a végpontja a programot.
megbízottja ParametrizedThreadStart
Ne feledje, hogy ThreadStart megbízottja csak mutatni elemfüggvényei void, és nem érvek. Sok esetben ez illik, de ha azt szeretnénk, hogy adatátvitelre módszer végre egy másodlagos szál, meg kell használni a típus ParametrizedThreadStart küldöttet.
Nézzünk egy példát:
osztály AutoResetEvent
Biztonságosabb, bár az is kívánatos alternatíva lehet egy kihívás Thread.Sleep () egy bizonyos ideig. A probléma az, hogy nincs vágy, hogy várjon a szükségesnél hosszabb ideig.
Egyszerű és szálbiztosak módja annak, hogy egy szál várakozás másik szál használatával jár egy osztályba AutoResetEvent. A patak, amelynek meg kell várni (mint például az áramlás a módszer Main ()), annak egy példányát az ebbe az osztályba, és így a tervező hamis, jelezve, hogy a bejelentés már eddig. Azon a ponton, ahol meg akarja várni, hívja WaitOne () metódust. Az alábbiakban a módosított programban, ami még egy statikus tag változó AutoResetEvent: