Model vláken inkoustu
Jednou z výhod rukopisu na tabletovém pc je, že je to hodně jako psaní s běžným perem a papírem. K tomu pero pro tablet shromažďuje vstupní data mnohem vyšší rychlostí než myš a vykresluje rukopis při zápisu uživatele. Vlákno uživatelského rozhraní aplikace nestačí ke shromažďování dat pera a vykreslování rukopisu, protože se může zablokovat. K vyřešení tohoto problému aplikace WPF používá dvě další vlákna, když uživatel zapíše rukopis.
Následující seznam popisuje vlákna, která se účastní shromažďování a vykreslování digitálního rukopisu:
Vlákno pera - vlákno, které přebírá vstup z pera. (Ve skutečnosti se jedná o fond vláken, ale toto téma se na něj odkazuje jako na vlákno pera.)
Vlákno uživatelského rozhraní aplikace – vlákno, které řídí uživatelské rozhraní aplikace.
Vlákno dynamického vykreslování – vlákno, které vykresluje rukopis, zatímco uživatel nakreslí tah. Vlákno dynamického vykreslování se liší od vlákna, které vykresluje další prvky uživatelského rozhraní pro aplikaci, jak je uvedeno v modelu vláken Windows Presentation Foundation.
Model rukopisu je stejný bez ohledu na to, jestli aplikace používá InkCanvas nebo vlastní ovládací prvek podobný ovládacího prvku při vytváření vstupního ovládacího prvku rukopisu. I když toto téma popisuje vlákna z hlediska InkCanvas, stejné koncepty platí při vytváření vlastního ovládacího prvku.
Přehled threadingu
Následující diagram znázorňuje model vláken, když uživatel nakreslí tah:
Akce, ke kterým dochází, když uživatel nakreslí tah
Když uživatel nakreslí tah, přijdou body pera na vlákně pera. Moduly plug-in stylus, včetně DynamicRenderer, přijímají pera body na závitu pera a mají šanci je upravit předtím, než InkCanvas je přijme.
Vykreslí DynamicRenderer body pera ve vlákně dynamického vykreslování. K tomu dochází současně s předchozím krokem.
Obdrží InkCanvas body pera ve vlákně uživatelského rozhraní.
Akce, ke kterým dochází po ukončení tahu uživatelem
Když uživatel dokončí kreslení tahu, InkCanvas vytvoří Stroke objekt a přidá ho do objektu InkPresenter, který ho staticky vykresluje.
Vlákno uživatelského rozhraní upozorní DynamicRenderer na statické vykreslení tahu, takže DynamicRenderer odebere vizuální znázornění tahu.
Kolekce rukopisu a moduly plug-in Stylus
Každý UIElement má .StylusPlugInCollection Objekty StylusPlugIn v příjmu StylusPlugInCollection a mohou měnit body pera ve vlákně pera. Objekty StylusPlugIn obdrží pera body podle jejich pořadí v objektu StylusPlugInCollection.
Následující diagram znázorňuje hypotetickou situaci, kdy StylusPlugIns kolekce UIElement obsahuje stylusPlugin1
, a DynamicRenderer, stylusPlugin2
v tomto pořadí.
V předchozím diagramu probíhá následující chování:
StylusPlugin1
upraví hodnoty pro x a y.DynamicRenderer obdrží upravené pero a vykresluje je ve vlákně dynamického vykreslování.
StylusPlugin2
obdrží změněné pero body a dále upraví hodnoty pro x a y.Aplikace shromažďuje body pera a když uživatel dokončí tah, staticky vykreslí tah.
Předpokládejme, že stylusPlugin1
omezuje pero na obdélník a stylusPlugin2
přeloží pero vpravo. V předchozím scénáři DynamicRenderer obdrží body s omezeným perem, ale nikoli přeložené pero. Když uživatel tah nakreslí, tah se vykreslí v mezích obdélníku, ale tah se zdá být přeložen, dokud uživatel pero nezvedne.
Provádění operací pomocí modulu plug-in Stylus ve vlákně uživatelského rozhraní
Vzhledem k tomu, že na vlákně pera nelze provést přesné testování hit-testování, mohou některé prvky občas přijímat pero vstup určený pro jiné prvky. Pokud potřebujete před provedením operace správně směrovat vstup, přihlaste se k odběru a provedení operace v objektu OnStylusDownProcessed, OnStylusMoveProcessednebo OnStylusUpProcessed metodě. Tyto metody jsou vyvolány vláknem aplikace po provedení přesného testování hit-testing. Chcete-li se přihlásit k odběru těchto metod, zavolejte NotifyWhenProcessed metodu v metodě, která se vyskytuje ve vlákně pera.
Následující diagram znázorňuje vztah mezi vláknem pera a vláknem uživatelského rozhraní s ohledem na události stylusu StylusPlugIn.
Vykreslování rukopisu
Když uživatel nakreslí tah, vykreslí rukopis na samostatném vlákně, DynamicRenderer takže rukopis se z pera zobrazí jako "tok", i když je vlákno uživatelského rozhraní zaneprázdněné. Vytvoří DynamicRenderer vizuální strom ve vlákně dynamického vykreslování, protože shromažďuje pera body. Když uživatel tah dokončí, zobrazí se žádost, DynamicRenderer aby byla upozorněna, když aplikace provede další vykreslení. Po dokončení dalšího průchodu DynamicRenderer vykreslování aplikace vyčistí její vizuální strom. Tento proces znázorňuje následující diagram.
Uživatel zahájí tah.
- Vytvoří DynamicRenderer strom vizuálu.
Uživatel tah nakreslel.
- Vytvoří DynamicRenderer strom vizuálu.
Uživatel ukončí tah.
Přidá InkPresenter tah do vizuálního stromu.
Vrstva integrace médií (MIL) staticky vykresluje tahy.
Vizuály DynamicRenderer se vyčistí.
.NET Desktop feedback