Přehled doplňků WPF
Rozhraní .NET Framework obsahuje doplněk, který můžou vývojáři použít k vytváření aplikací, které podporují rozšiřitelnost doplňků. Tento model doplňku umožňuje vytvářet doplňky, které se integrují s funkcemi aplikace a rozšiřují je. V některých scénářích musí aplikace také zobrazovat uživatelská rozhraní, která poskytují doplňky. Toto téma ukazuje, jak WPF rozšiřuje model doplňku .NET Framework tak, aby umožňoval tyto scénáře, architekturu za ní, její výhody a jeho omezení.
Předpoklady
Vyžaduje se znalost doplňku rozhraní .NET Framework. Další informace naleznete v tématu Doplňky a rozšiřitelnost.
Přehled doplňků
Aby se zabránilo složitosti rekompilace aplikací a opětovnému nasazení, aby zahrnovaly nové funkce, aplikace implementují mechanismy rozšiřitelnosti, které vývojářům (jak první straně, tak třetí straně) umožňují vytvářet další aplikace, které se s nimi integrují. Nejběžnější způsob, jak tento typ rozšiřitelnosti podporovat, je použití doplňků (označovaných také jako doplňky a moduly plug-in). Mezi příklady reálných aplikací, které zpřístupňují rozšiřitelnost pomocí doplňků, patří:
Doplňky aplikace Internet Explorer
Přehrávač médií Windows modulů plug-in.
Doplňky sady Visual Studio
Například doplněk Přehrávač médií Windows umožňuje vývojářům třetích stran implementovat moduly plug-in, které rozšiřují Přehrávač médií Windows různými způsoby, včetně vytváření dekodérů a kodérů pro formáty médií, které nejsou nativně podporovány Přehrávač médií Windows (například DVD, MP3), zvukové efekty a kůže. Každý model doplňku je sestaven tak, aby zpřístupnil funkce, které jsou pro aplikaci jedinečné, i když existuje několik entit a chování, které jsou společné pro všechny modely doplňků.
Tři hlavní entity typických řešení rozšiřitelnosti doplňků jsou kontrakty, doplňky a hostitelské aplikace. Kontrakty definují, jak se doplňky integrují s hostitelskými aplikacemi dvěma způsoby:
Doplňky se integrují s funkcemi implementovanými hostitelskými aplikacemi.
Hostitelské aplikace zpřístupňují funkce pro doplňky, se kterými se dají integrovat.
Aby bylo možné doplňky používat, musí je hostitelské aplikace najít a načíst za běhu. Aplikace, které podporují doplňky, proto mají následující další odpovědnosti:
Zjišťování: Vyhledání doplňků, které dodržují kontrakty podporované hostitelskými aplikacemi.
Aktivace: Načítání, spouštění a navazování komunikace s doplňky
Izolace: Použití domén aplikací nebo procesů k vytvoření hranic izolace, které chrání aplikace před potenciálními problémy se zabezpečením a spouštěním doplňků.
Komunikace: Povolení vzájemné komunikace doplňků a hostitelských aplikací přes hranice izolace voláním metod a předáváním dat
Správa doby života: Načítání a uvolňování domén a procesů aplikací čistým a předvídatelným způsobem (viz Domény aplikací).
Správa verzí: Zajištění, aby hostitelské aplikace a doplňky stále mohly komunikovat při vytváření nových verzí.
Vývoj robustního doplňkového modelu je v konečném důsledku nevýkonný podnik. Z tohoto důvodu poskytuje rozhraní .NET Framework infrastrukturu pro vytváření modelů doplňků.
Poznámka:
Podrobnější informace o doplňcích najdete v tématu Doplňky a rozšiřitelnost.
Přehled doplňku .NET Framework
Doplněk .NET Framework, který se nachází v System.AddIn oboru názvů, obsahuje sadu typů, které jsou navrženy tak, aby zjednodušily vývoj rozšiřitelnosti doplňků. Základní jednotkou doplňku rozhraní .NET Framework je kontrakt, který definuje, jak hostitelská aplikace a doplněk vzájemně komunikují. Kontrakt je přístupný hostitelské aplikaci pomocí zobrazení konkrétního hostitele a aplikace kontraktu. Podobně je v doplňku vystavené zobrazení konkrétního doplňku. Adaptér se používá k tomu, aby hostitelská aplikace a doplněk komunikovaly mezi příslušnými zobrazeními kontraktu. Kontrakty, zobrazení a adaptéry se označují jako segmenty a sada souvisejících segmentů představuje kanál. Kanály jsou základem, na kterém doplněk .NET Framework podporuje zjišťování, aktivaci, izolaci zabezpečení, izolaci spouštění (pomocí domén aplikací i procesů), komunikaci, správu životnosti a správu verzí.
Součet této podpory umožňuje vývojářům vytvářet doplňky, které se integrují s funkcemi hostitelské aplikace. Některé scénáře však vyžadují, aby hostitelské aplikace zobrazovaly uživatelská rozhraní poskytovaná doplňky. Vzhledem k tomu, že každá prezentační technologie v rozhraní .NET Framework má vlastní model pro implementaci uživatelských rozhraní, doplněk .NET Framework nepodporuje žádnou konkrétní prezentační technologii. Místo toho WPF rozšiřuje model doplňku rozhraní .NET Framework o podporu uživatelského rozhraní pro doplňky.
Doplňky WPF
WPF ve spojení s doplňkem rozhraní .NET Framework umožňuje řešit širokou škálu scénářů, které vyžadují hostitelské aplikace k zobrazení uživatelských rozhraní z doplňků. Konkrétně tyto scénáře řeší WPF s následujícími dvěma programovacími modely:
Doplněk vrátí uživatelské rozhraní. Doplněk vrátí uživatelské rozhraní hostitelské aplikaci prostřednictvím volání metody definované kontraktem. Tento scénář se používá v následujících případech:
Vzhled uživatelského rozhraní vrácené doplňkem závisí na datech nebo podmínkách, které existují pouze za běhu, například dynamicky generovaných sestav.
Uživatelské rozhraní pro služby poskytované doplňkem se liší od uživatelského rozhraní hostitelských aplikací, které můžou doplněk používat.
Doplněk primárně provádí službu pro hostitelskou aplikaci a hlásí stav hostitelské aplikace pomocí uživatelského rozhraní.
Doplněk je uživatelské rozhraní. Doplněk je uživatelské rozhraní definované kontraktem. Tento scénář se používá v následujících případech:
Doplněk neposkytuje jiné služby, než se zobrazují, například inzerování.
Uživatelské rozhraní pro služby poskytované doplňkem je společné pro všechny hostitelské aplikace, které můžou tento doplněk používat, například kalkulačku nebo výběr barvy.
Tyto scénáře vyžadují, aby objekty uživatelského rozhraní mohly být předány mezi hostitelskými aplikacemi a doménami aplikací doplňků. Vzhledem k tomu, že model doplňku rozhraní .NET Framework spoléhá na komunikaci mezi doménami aplikace vzdálené komunikace, musí být objekty, které jsou mezi nimi předány, vzdálené komunikace.
Remotable objekt je instance třídy, která provádí jednu nebo více z následujících akcí:
Odvozuje z MarshalByRefObject třídy.
Implementuje ISerializable rozhraní.
SerializableAttribute Má použitý atribut.
Poznámka:
Další informace týkající se vytváření objektů vzdálené komunikace rozhraní .NET Framework naleznete v tématu Vytváření objektů vzdálené komunikace.
Typy uživatelského rozhraní WPF nejsou vzdálené. Aby bylo možné tento problém vyřešit, WPF rozšiřuje model doplňku .NET Framework, aby bylo možné zobrazit uživatelské rozhraní WPF vytvořené doplňky z hostitelských aplikací. Tuto podporu poskytuje WPF dvěma typy: INativeHandleContract rozhraní a dvě statické metody implementované FrameworkElementAdapters třídou: ContractToViewAdapter a ViewToContractAdapter. Na vysoké úrovni se tyto typy a metody používají následujícím způsobem:
WPF vyžaduje, aby uživatelská rozhraní poskytovaná doplňky jsou třídy, které jsou přímo nebo nepřímo odvozeny od FrameworkElementobrazců, ovládacích prvků, uživatelských ovládacích prvků, panelů rozložení a stránek.
Všude, kde kontrakt deklaruje, že uživatelské rozhraní bude předáno mezi doplňkem a hostitelskou aplikací, musí být deklarováno jako INativeHandleContract (ne FrameworkElementjako ) INativeHandleContract je vzdálené vyjádření uživatelského rozhraní doplňku, které lze předat přes hranice izolace.
Před předáním z domény aplikace doplňku se zabalí FrameworkElement jako INativeHandleContract volání ViewToContractAdapter.
Po předání do domény aplikace hostitele musí INativeHandleContract být znovu zabalen jako FrameworkElement volání ContractToViewAdapter.
Způsob INativeHandleContracta ContractToViewAdapterViewToContractAdapter použití závisí na konkrétním scénáři. Následující části obsahují podrobnosti o jednotlivých programovacích modelech.
Doplněk vrátí uživatelské rozhraní.
Aby doplněk vrátil uživatelské rozhraní do hostitelské aplikace, je nutné splnit následující:
Hostitelská aplikace, doplněk a kanál musí být vytvořeny, jak je popsáno v dokumentaci k doplňkům a rozšiřitelnosti rozhraní .NET Framework.
Kontrakt musí implementovat IContract a pro vrácení uživatelského rozhraní kontrakt musí deklarovat metodu s návratovou hodnotou typu INativeHandleContract.
Uživatelské rozhraní, které se předává mezi doplňkem a hostitelskou aplikací, musí přímo nebo nepřímo odvozovat .FrameworkElement
Uživatelské rozhraní vrácené doplňkem musí být převedeno z objektu na FrameworkElement před přechodem INativeHandleContract hranice izolace.
Vrácené uživatelské rozhraní musí být převedeno z objektu na po INativeHandleContractFrameworkElement překročení hranice izolace.
Hostitelská aplikace zobrazí vrácenou FrameworkElement.
Příklad, který ukazuje, jak implementovat doplněk, který vrací uživatelské rozhraní, naleznete v tématu Vytvoření doplňku, který vrací uživatelské rozhraní.
Doplněk je uživatelské rozhraní.
Pokud je doplněk uživatelským rozhraním, vyžadují se následující položky:
Hostitelská aplikace, doplněk a kanál musí být vytvořeny, jak je popsáno v dokumentaci k doplňkům a rozšiřitelnosti rozhraní .NET Framework.
Rozhraní kontraktu pro doplněk musí implementovat INativeHandleContract.
Doplněk, který se předává hostitelské aplikaci, musí být přímo nebo nepřímo odvozen z FrameworkElement.
Doplněk se musí před přechodem hranice izolace převést z objektu INativeHandleContract na FrameworkElement objekt.
Doplněk se musí převést z objektu na po INativeHandleContractFrameworkElement překročení hranice izolace.
Hostitelská aplikace zobrazí vrácenou FrameworkElement.
Příklad, který ukazuje, jak implementovat doplněk, který je uživatelské rozhraní, naleznete v tématu Vytvoření doplňku, který je uživatelské rozhraní.
Vrácení více uživatelských rozhraní z doplňku
Doplňky často poskytují více uživatelských rozhraní pro zobrazení hostitelských aplikací. Představte si například doplněk, který je uživatelské rozhraní, které také poskytuje informace o stavu hostitelské aplikaci, také jako uživatelské rozhraní. Doplněk, jako je tento, lze implementovat pomocí kombinace technik z add-in vrátí uživatelské rozhraní a doplněk je modely uživatelského rozhraní .
Doplňky a aplikace prohlížeče XAML
V příkladech zatím byla hostitelská aplikace nainstalovanou samostatnou aplikací. Aplikace prohlížeče XAML (XBAPs) ale můžou také hostovat doplňky, i když s následujícími dalšími požadavky na sestavení a implementaci:
Manifest aplikace XBAP musí být nakonfigurován speciálně ke stažení kanálu (složek a sestavení) a sestavení doplňků do mezipaměti aplikace ClickOnce na klientském počítači ve stejné složce jako XBAP.
Kód XBAP ke zjišťování a načítání doplňků musí jako kanál a umístění doplňku používat mezipaměť aplikací ClickOnce pro XBAP.
XBAP musí doplněk načíst do speciálního kontextu zabezpečení, pokud doplněk odkazuje na volné soubory, které jsou umístěny v lokalitě původu; Při hostování prostřednictvím XBAPs můžou doplňky odkazovat pouze na volné soubory, které jsou umístěny v lokalitě původu hostitelské aplikace.
Tyto úlohy jsou podrobně popsány v následujících pododdílech.
Konfigurace kanálu a doplňku pro nasazení ClickOnce
XBAPs se stáhnou a spustí z bezpečné složky v mezipaměti nasazení ClickOnce. Aby XBAP mohl hostovat doplněk, musí být kanál a sestavení doplňku také staženy do bezpečné složky. Abyste toho dosáhli, musíte nakonfigurovat manifest aplikace tak, aby zahrnoval sestavení kanálu i doplňku ke stažení. To je v sadě Visual Studio nejsnázornější, i když kanál a sestavení doplňků musí být v kořenové složce projektu XBAP hostitele, aby Visual Studio detekuje sestavení kanálu.
V důsledku toho je prvním krokem sestavení kanálu a sestavení doplňku do kořenového adresáře projektu XBAP nastavením výstupu sestavení každého sestavení kanálu a projektů sestavení doplňků. Následující tabulka ukazuje výstupní cesty sestavení pro projekty sestavení kanálu a projekt sestavení doplňků, které jsou ve stejném řešení a kořenové složce jako hostitelský projekt XBAP.
Tabulka 1: Výstupní cesty sestavení pro sestavení kanálu hostovaná XBAP
Projekt sestavení kanálu | Výstupní cesta sestavení |
---|---|
Kontrakt | ..\HostXBAP\Contracts\ |
Zobrazení doplňku | ..\HostXBAP\AddInViews\ |
Adaptér doplňku | ..\HostXBAP\AddInSideAdapters\ |
Adaptér na straně hostitele | ..\HostXBAP\HostSideAdapters\ |
Doplněk | ..\HostXBAP\AddIns\WPFAddIn1 |
Dalším krokem je určení sestavení kanálu a sestavení doplňku jako soubory obsahu XBAPs v sadě Visual Studio následujícím způsobem:
Zahrnutí kanálu a sestavení doplňku v projektu tak, že kliknete pravým tlačítkem na každou složku kanálu v Průzkumník řešení a zvolíte Zahrnout do projektu.
Nastavení akce sestavení každého sestavení kanálu a sestavení doplňku na obsah z okna Vlastnosti.
Posledním krokem je konfigurace manifestu aplikace tak, aby zahrnovala soubory sestavení kanálu a soubor sestavení doplňku ke stažení. Soubory by se měly nacházet ve složkách v kořenovém adresáři složky v mezipaměti ClickOnce, kterou aplikace XBAP zabírá. Konfiguraci lze v sadě Visual Studio dosáhnout následujícím způsobem:
Klepněte pravým tlačítkem myši na projekt XBAP, klepněte na příkaz Vlastnosti, klepněte na tlačítko Publikovat a potom klepněte na tlačítko Soubory aplikace.
V dialogovém okně Soubory aplikací nastavte stav publikování jednotlivých kanálů a knihovny DLL doplňků na Zahrnout (automaticky) a nastavte skupinu stahování pro každý kanál a knihovnu DLL doplňku na (povinné).
Použití kanálu a doplňku z základu aplikace
Když je kanál a doplněk nakonfigurované pro nasazení ClickOnce, stáhnou se do stejné složky mezipaměti ClickOnce jako XBAP. Pokud chcete použít kanál a doplněk z XBAP, musí je kód XBAP získat z základu aplikace. Různé typy a členy doplňku rozhraní .NET Framework pro použití kanálů a doplňků poskytují zvláštní podporu pro tento scénář. Nejprve je cesta identifikována hodnotou výčtu ApplicationBase . Tuto hodnotu použijete s přetíženími příslušných členů doplňku pro použití kanálů, které obsahují následující:
Přístup k lokalitě původu hostitele
Aby doplněk mohl odkazovat na soubory z lokality původu, musí být doplněk načten s izolací zabezpečení, která odpovídá hostitelské aplikaci. Tato úroveň zabezpečení je identifikována hodnotou výčtu AddInSecurityLevel.Host a předána Activate metodě při aktivaci doplňku.
Architektura doplňků WPF
Na nejvyšší úrovni, jak jsme viděli, WPF umožňuje doplňky .NET Framework implementovat uživatelská rozhraní (které jsou odvozeny přímo nebo nepřímo z FrameworkElement) pomocí a ViewToContractAdapterINativeHandleContractContractToViewAdapter. Výsledkem je, že hostitelská aplikace se vrátí FrameworkElement z uživatelského rozhraní v hostitelské aplikaci.
V případě jednoduchých scénářů doplňků uživatelského rozhraní je to tolik podrobností, kolik vývojář potřebuje. V případě složitějších scénářů, zejména těch, které se snaží využívat další služby WPF, jako je rozložení, prostředky a datová vazba, je podrobnější znalost toho, jak WPF rozšiřuje model doplňku .NET Framework s podporou uživatelského rozhraní, je nutný k pochopení jeho výhod a omezení.
WpF v podstatě nepředává uživatelské rozhraní z doplňku do hostitelské aplikace; místo toho WPF předá popisovač okna Win32 pro uživatelské rozhraní pomocí interoperability WPF. Pokud je uživatelské rozhraní z doplňku předáno hostitelské aplikaci, dojde k následujícímu:
Na straně doplňku získá WPF popisovač okna pro uživatelské rozhraní, které se zobrazí hostitelskou aplikací. Popisovač okna je zapouzdřen interní WPF třídy, která je odvozena a HwndSource implementuje INativeHandleContract. Instance této třídy je vrácena ViewToContractAdapter a je zařazena z domény aplikace doplňku do domény aplikace hostitelské aplikace.
Na straně hostitelské aplikace WPF znovu zabalí HwndSource jako interní WPF třídy, která je odvozena od HwndHost a spotřebovává INativeHandleContract. Instance této třídy je vrácena ContractToViewAdapter hostitelskou aplikací.
HwndHost existuje k zobrazení uživatelských rozhraní identifikovaných popisovači oken z uživatelských rozhraní WPF. Další informace najdete v tématu Spolupráce WPF a Win32.
Souhrnně řečeno , INativeHandleContractViewToContractAdaptera existují a ContractToViewAdapter existují, aby obslužné rutiny okna pro uživatelské rozhraní WPF bylo předáno z doplňku do hostitelské aplikace, kde je zapouzdřeno HwndHost a zobrazí uživatelské rozhraní hostitelské aplikace.
Poznámka:
Vzhledem k tomu, že hostitelská aplikace získá HwndHostobjekt , nemůže převést objekt vrácený ContractToViewAdapter na typ, který je implementován jako doplněk (například ).UserControl
Podle své povahy má určitá omezení, HwndHost která ovlivňují způsob jejich použití hostitelskými aplikacemi. WPF se ale rozšiřuje HwndHost o několik možností pro scénáře doplňků. Tyto výhody a omezení jsou popsány níže.
Výhody doplňku WPF
Vzhledem k tomu, že se uživatelská rozhraní doplňku WPF zobrazují z hostitelských aplikací pomocí interní třídy odvozené z HwndHost, jsou tato uživatelská rozhraní omezena schopnostmi HwndHost s ohledem na služby uživatelského rozhraní WPF, jako jsou rozložení, vykreslování, vazby dat, styly, šablony a prostředky. WPF ale rozšiřuje svou interní HwndHost podtřídu o další funkce, které zahrnují následující:
Tabbing between a host application's UI and an add-in's UI. Všimněte si, že programovací model doplňku je uživatelské rozhraní vyžaduje, aby adaptér doplňku přepsl QueryContract , aby bylo možné povolit tabbing, ať už je doplněk plně důvěryhodný nebo částečně důvěryhodný.
Splnění požadavků na přístupnost pro uživatelská rozhraní doplňků, které se zobrazují z uživatelských rozhraní hostitelské aplikace
Povolení bezpečného spouštění aplikací WPF ve scénářích s více doménami aplikací
Zabránění neoprávněnému přístupu k obslužným rutinám uživatelského rozhraní doplňku při spuštění doplňků s izolací zabezpečení (to znamená částečně důvěryhodným sandboxem zabezpečení). Volání ViewToContractAdapter zajišťuje toto zabezpečení:
Pro programovací model doplňku vrací programovací model uživatelského rozhraní, jediným způsobem, jak předat popisovač okna pro uživatelské rozhraní doplňku přes hranici izolace, je volat ViewToContractAdapter.
Pro programovací model doplňku je programovací model uživatelského rozhraní, přepsání QueryContract na adaptér na straně doplňku a volání ViewToContractAdapter (jak je znázorněno v předchozích příkladech) je povinné, stejně jako volání implementace adaptéru
QueryContract
doplňku z adaptéru na straně hostitele.
Poskytuje ochranu proti spuštění více domén aplikace. Kvůli omezením domén aplikací způsobují neošetřené výjimky, které jsou vyvolány v doménách aplikací doplňků, chybové ukončení celé aplikace, i když existuje hranice izolace. WpF a doplněk .NET Framework však poskytují jednoduchý způsob, jak tento problém obejít a zlepšit stabilitu aplikací. Doplněk WPF, který zobrazuje uživatelské rozhraní, vytvoří Dispatcher vlákno, na kterém běží doména aplikace, pokud hostitelská aplikace je aplikace WPF. Všechny neošetřené výjimky, ke kterým dochází v doméně aplikace, můžete zjistit zpracováním UnhandledException události doplňku DispatcherWPF . Můžete získat z DispatcherCurrentDispatcher této vlastnosti.
Omezení doplňků WPF
Kromě výhod, které WPF přidává do výchozího chování poskytovaného obslužnými HwndSourcerutinami , HwndHosta oken, existují také omezení pro uživatelská rozhraní doplňku, která se zobrazují z hostitelských aplikací:
Uživatelská rozhraní doplňků zobrazená z hostitelské aplikace nerespektují chování při výřezu hostitelské aplikace.
Koncept vzdušného prostoru ve scénářích interoperability se vztahuje také na doplňky (viz Přehled technologických oblastí).
Služby uživatelského rozhraní hostitelské aplikace, jako je dědičnost prostředků, datová vazba a příkazování, nejsou automaticky dostupné pro uživatelská rozhraní doplňků. Pokud chcete těmto službám poskytnout doplněk, musíte kanál aktualizovat.
Uživatelské rozhraní doplňku nelze otočit, škálovat, zkosit nebo jinak ovlivnit transformací (viz Přehled transformací).
Obsah uvnitř uživatelských rozhraní doplňků, které jsou vykresleny operacemi kreslení z System.Drawing oboru názvů, můžou zahrnovat alfa blending. Nicméně, jak uživatelské rozhraní doplňku, tak uživatelské rozhraní hostitelské aplikace, které ho obsahuje, musí být 100% neprůhlené; Jinými slovy,
Opacity
vlastnost na obou musí být nastavena na hodnotu 1.AllowsTransparency Pokud je vlastnost okna v hostitelské aplikaci obsahující uživatelské rozhraní doplňku nastavena na
true
, doplněk je neviditelný. To platí i v případě, že uživatelské rozhraní doplňku je 100% neprůhlené (to znamená, žeOpacity
vlastnost má hodnotu 1).Uživatelské rozhraní doplňku se musí zobrazit nad ostatními prvky WPF ve stejném okně nejvyšší úrovně.
Pomocí rozhraní doplňku nelze vykreslit žádnou část uživatelského rozhraní doplňku VisualBrush. Místo toho může doplněk pořídit snímek vygenerovaného uživatelského rozhraní a vytvořit rastrový obrázek, který lze předat hostitelské aplikaci pomocí metod definovaných kontraktem.
Multimediální soubory nelze přehrát z uživatelského rozhraní doplňku MediaElement .
Události myši generované pro uživatelské rozhraní doplňku nejsou přijaty ani vyvolány hostitelskou aplikací a
IsMouseOver
vlastnost uživatelského rozhraní hostitelské aplikace má hodnotufalse
.Když se fokus přesune mezi ovládacími prvky v uživatelském rozhraní doplňku,
GotFocus
nebudou událostiLostFocus
přijaty ani vyvolány hostitelskou aplikací.Část hostitelské aplikace, která obsahuje uživatelské rozhraní doplňku, se při tisku zobrazí bíle.
Všechny dispečery (viz Dispatcher) vytvořené uživatelským rozhraním doplňku musí být ručně vypnuty, aby se doplněk vlastníka rozbalil, pokud hostitelská aplikace pokračuje ve spouštění. Kontrakt může implementovat metody, které hostitelské aplikaci umožňují signalizovat doplněk před uvolněním doplňku, čímž umožní uživatelské rozhraní doplňku vypnout jeho dispečery.
Pokud je uživatelské rozhraní doplňku nebo InkCanvas ho InkCanvasobsahuje, nemůžete doplněk uvolnit.
Optimalizace výkonu
Ve výchozím nastavení se při použití více domén aplikací načtou do domény této aplikace různá sestavení rozhraní .NET Framework vyžadovaná jednotlivými aplikacemi. V důsledku toho může mít čas potřebný k vytvoření nových domén aplikace a spouštění aplikací v nich vliv na výkon. Rozhraní .NET Framework však poskytuje způsob, jak zkrátit časy spuštění tím, že aplikace instruují, aby sdílely sestavení napříč doménami aplikace, pokud jsou již načteny. Provedete to pomocí atributu LoaderOptimizationAttribute , který se musí použít pro metodu vstupního bodu (Main
). V tomto případě musíte k implementaci definice aplikace použít pouze kód (viz Přehled správy aplikací).
Viz také
.NET Desktop feedback