Modell patakok

Windows Presentation Foundation (WPF) alkalmazások létre, hogy segítse a fejlesztők nehézségek elkerülése a tervezési folyamat. Ennek eredményeként a legtöbb WPF fejlesztők nem kell írni egy felületet használó több mint egy szál. Mivel a többszálú programok bonyolult és nehéz a hibakeresés, el kell kerülni, ha van egyszálú megoldásokat.

Függetlenül attól, hogy a minőségi építészet, UI, nem platform nem tud ajánlani egy egyszálú megoldás minden típusú probléma. WPF alkalmazás elég közel kéznél, hogy megoldja ezt a problémát, de még mindig vannak olyan helyzetek, amikor több szálon teljesítményének javítására felhasználói felület (UI) és az alkalmazások teljesítményét. Áttekintése után néhány alapvető anyag ebben a dokumentumban tárgyalja ezeket a helyzeteket, és végül beszéljük meg további részleteket.

Ez a rész a következő részekben.

Fejlődő WPF alkalmazások általában kezdődik két stream: az egyik a megjelenítés feldolgozása, és egyéb UI ellenőrzéseket. Áramlásábrázolás végezzük gyakorlatilag láthatatlan a felhasználó a háttérben, miközben a UI szál kap bemenet, kezeli azokat az eseményeket jeleníti meg a képet a képernyőre, és végrehajtja alkalmazás kódját. A legtöbb alkalmazás egy szál UI, bár egyes esetekben jobb, hogy egy pár. Később, úgy kell tekinteni, mint egy példát.

UI adatfolyam sorokban dolgozni elemek belsejében a tárgy, az úgynevezett diszpécser. Object Diszpécser ki az operációs elemek alapján prioritásokat és végrehajtja mindegyikük a befejezésig. Minden UI szál kell legalább egy tárgy diszpécser. Diszpécser és mindegyik egység képes elvégezni a munkát tételek csak egy patak.

Előfeltétele az épület egy érzékeny, tiszta felhasználói alkalmazások, hogy maximalizálja a termelékenységet a diszpécser. természetvédelmi munkát példány kicsi. Ezzel a módszerrel az elemek soha nem lesz elavult a kiosztási sorban feldolgozásra váró. Minden késlekedés a bemeneti adatokat, és a válasz is csalódást a felhasználó.

Mivel ebben az esetben a WPF alkalmazást kell feldolgoznia a nagy tranzakciók? Mi van, ha a kód tartalmaz egy nagyobb vagy számítással van szükség a lekérdezés az adatbázis egy távoli szerveren? Általában a nagy tranzakciók feldolgozása egy külön téma, így a UI szál szabadon szolgáltatási elemek a diszpécser sorban. Befejezése után a nagy művelet, akkor adja át az eredményt vissza a UI szál kijelzőn.

Történelmileg, a Windows operációs rendszer lehetővé teszi a hozzáférést a felhasználói felület elemeit csak létrehozni az áramlás. Ez azt jelenti, hogy a háttérben téma, amely felelős egy bizonyos ideig a feladat, nem tudja frissíteni a szövegmezőbe annak befejezését. Windows létrehozza ezt a korlátozást, integritásának biztosítása az UI komponensek. A lista tűnhet, furcsa, ha annak tartalma frissül háttér szál a folyamat látható.

WPF támogatja a beépített kölcsönös kizárási mechanizmus, amely elvégzi ezt a koordinációt. Az osztályok többsége WPF származnak az osztály DispatcherObject. Amikor létrehoz egy DispatcherObject tárolja egy hivatkozás a diszpécser. társított aktuális végrehajtó szálat. Tény, DispatcherObject társul a menet, amely azt létrehozta. Végrehajtása során a program DispatcherObject hívhatjuk nyitott módszer VerifyAccess. VerifyAccess ellenőrzi a diszpécser. kapcsolatos jelenlegi patak, és összehasonlítja azt hivatkozva a diszpécser. ami megmarad létrehozása során. Ha nem egyezik, VerifyAccess eljárás kivételt dob. VerifyAccess a hívás elején az egyes módszerek tartozó DispatcherObject objektumot.

Ha csak egy szál lehet változtatni a UI, mint a háttér szálak kölcsönhatásba a felhasználó? A háttérben téma kérheti az UI szál a művelet végrehajtásához a nevében. Ezt úgy éri el kimutatjuk a működtető tag a tárgy diszpécser UI téma. Diszpécser osztály kétféleképpen regisztráció munka példány: Invoke és BeginInvoke. Mindkét módszer rendelni egy küldöttet végrehajtását. Indítsunk eljárás egy szinkron hívás - nem tér vissza, amíg a UI szál befejezi végrehajtását küldöttje. BeginInvoke módszer aszinkron és azonnal visszatér.

Object Diszpécser megrendelések az elemeket a prioritásos sor. Vannak tíz szintet lehet megadni, ha hozzá egy elemet a sorhoz diszpécser. Ezek a prioritások vannak tárolva DispatcherPriority lista. További részletek a szintek DispatcherPriority megtalálható a Windows SDK dokumentációban.

Egy példa a egyszálú alkalmazás teljesítő hosszadalmas számítások

A legtöbb grafikus felhasználói felülettel (GUI) töltik a legtöbb időt álló tétlen várakozás események, hogy a generált válasz a felhasználói műveletekre. A gondos programozás ez üresjárati időt lehet használni konstruktívan csökkentése nélkül UI válasz sebességet. WPF threading modell nem engedélyezi a bemenet megszakítja a műveletet, hogy zajlik az UI szál. Ez azt jelenti, hogy rendszeresen vissza kell térnie a diszpécser objektumra. feldolgozzák a függőben lévő bemeneti eseményeket, mielőtt azok elavultak.

Tekintsük a következő példát:

Modell patakok

Ez az egyszerű alkalmazás keres prímszámok, kezdve három-től. Amikor a felhasználó rákattint a Start gombra a keresés elindításához. Ha a program talál egy prímszám, akkor frissíti a felhasználói felület. Bármely ponton lehet állítani a keresést.

Annak ellenére, hogy az egyszerűség a keresési műveleteket prímszám lehet végtelen, hogy néhány problémával. Ha az összes keresési műveleteket végzett feldolgozás a kattintás eseménykezelő gombok UI áramlás soha nem volt lehetősége, hogy kezelje egyéb eseményeket. UI nem válaszol a beérkező vagy feldolgozni az üzeneteket. Soha nem frissítette a kijelző, és nem reagál a gombra kattintva.

Kereshet prímszám egy külön téma, de akkor is kell foglalkozni szinkronizációs problémák. Az egyszálú megközelítés közvetlenül aktualizálja a címkét, amely a legnagyobb prímszám szerepel.

Ha megtöri a feladat számítási kezelhető egységekre, lehetséges, hogy menjen vissza rendszeresen a tárgy és a feldolgozás Diszpécser eseményeket. WPF alkalmazás kell adni a lehetőséget, hogy frissítse és folyamat bemeneti.

A legjobb módja annak, hogy partíciót a feldolgozási idő között kiszámítását és feldolgozását események ellenőrzése számítás diszpécser objektumra. Használata BeginInvoke módszer lehet ütemezni, hogy ellenőrizze prímszám ugyanabban a sorban, ahonnan jön a UI esemény. A példában a tervezett ellenőrzés csak egy prímszám minden egyes időpontban. A vizsgálat után, elsődleges a következő ellenőrzés a tervek szerint azonnal. Ez az ellenőrzés csak akkor kerül végrehajtásra feldolgozását követően a függőben lévő UI eseményeket.

Modell patakok

Ezzel a Microsoft Word alkalmazás mechanizmus ellenőrzi a helyesírást. Helyesírás-ellenőrzés történik a háttérben, a holtidő a UI szál. Nézzük meg a kódot.

A következő példa bemutatja a XAML, hogy létrehozza a felhasználói felületet.

Ez a módszer ellenőrzi, hogy a következő páratlan szám prím. Ha ez egy egyszerű módszer közvetlenül frissíti a bigPrime TextBlock. hogy az tükrözze a keresési eredmények között. Ezt megtehetjük, mert a számítási fordul elő ugyanazon szál létrehozásához használt összetevő. Ha egy külön téma a számításokhoz kellett volna használni egy bonyolultabb szinkronizációs mechanizmus, és végre frissítések a UI szál. Ez a helyzet tovább fog mutatni.

Teljes forráskódját egy példát látni. Lásd egyszálú Alkalmazás hosszan futó kiszámítása minta ( „Egy példa az egyszálú alkalmazás teljesítő hosszas számításokat”).

Feldolgozási műveletek blokkoló háttérben téma

zár művelet feldolgozása egy grafikus alkalmazás lehet egy nehéz feladat. Nem fogjuk hívni a módszerek blokkoló esemény rakodók, mert az alkalmazás leállt. Lehetőség van egy külön téma, hogy kezelni ezeket a tranzakciókat, de aztán össze kell hangolni az UI szál, hiszen nem lehet közvetlenül megváltoztatni a GUI a munkafolyamat. Box küldöttek UI folyni Diszpécser objektum lehet elérni Invoke módszer vagy BeginInvoke. Ennek eredményeként, ezek a küldöttek találkoztak indítvány változtatni a felhasználói felület elemeit.

Ebben a példában azt szimulálni egy távoli eljárás hívás fogadó időjárás. Mi egy külön szálat, hogy végre a hívást, és tervezi, hogy frissítse a módszer az objektum UI áramlási Diszpécser végén.

Modell patakok

Kapcsolódó cikkek