A felügyelt kódtár használata
A közös nyelvi futtatókörnyezet a Microsoft .NET-keretrendszer alapja. A közös nyelvi futtatókörnyezetet olyan ügynökként tekintheti, amely a végrehajtáskor kezeli a kódot, olyan alapvető szolgáltatásokat nyújtva, mint a memóriakezelés, a szálkezelés és az újraírás, miközben szigorú kódbiztonságot is érvényesít. Valójában a kódkezelés fogalma a közös nyelvi futtatókörnyezet alapvető elve. A közös nyelvi futtatókörnyezetet megcélozó kódot felügyelt kódnak nevezzük. A közös nyelvi futtatókörnyezetet nem célzó kódot natív kódnak nevezzük.
A Keretrendszer osztálytár az újrafelhasználható osztályok átfogó, objektumorientált gyűjteménye, amellyel a hagyományos parancssori vagy grafikus felhasználói felületi (GUI) alkalmazásoktól kezdve az alkalmazásokig terjedő alkalmazásokat fejleszthet a ASP.NET és a Web Services által biztosított legújabb innovációk alapján.
A táblaszámítógép felügyelt kódtára olyan felügyelt objektumokat tartalmaz, amelyek kibővítik a keretrendszert, hogy támogatást nyújtsanak a kézírás beviteléhez és kimenetéhez táblagépen, valamint adatcserét más számítógépeken.
Kivételek
A Táblaszámítógép API felügyelt kódtár-objektumai körbefuttatják a COM-kódtár implementációit. Ha a mögöttes COM-kódtár objektuma vagy vezérlője hibát ad vissza, a felügyelt API-k egy Marshal.ThrowExceptionForHR kivételt adnak ki, amely a belső COM-kivétel részleteit tartalmazza. Az esetlegesen visszaadott hibák részleteiért tekintse meg a COM-kódtár-referencia HRESULT értékeit.
Objektum-összehasonlítás
A Táblaszámítógép platform felügyelt kódtárának összes objektuma esetében a Equals nincs felülírva, hogy megfelelően összehasonlítsa két azonos objektumot. A felügyelt alkalmazásprogramozási felület (API) nem támogatja az objektumok egyenlőséghez való összehasonlítását sem az Egyenlő függvénnyel, sem az egyenlő (==) operátoron keresztül.
Kötés a legújabb Microsoft.Ink.dll
A legújabb Microsoft.Ink.dll szerelvény kompatibilis a Microsoft.Ink.dll 1.0-s és Microsoft.Ink.15.dll-es verziójához. A legtöbb esetben nem kell módosítania az alkalmazásokat, amelyeket a régebbi verziókkal terjesztenek. Bizonyos esetekben azonban arra kell utasítania a közös nyelvi futtatókörnyezetbetöltőt, hogy az újabb dinamikus csatolású kódtárat (DLL- t) használja, ahol a régebbi DLL-eket hivatkozták.
Az új szerelvényhez az alábbi technikával csak akkor kell explicit módon kapcsolódnia, ha az alkalmazás olyan összetevőt használ, amely az 1.0-s vagy az 1.5-ös szerelvényre hivatkozik egy olyan összetevővel kombinálva, amely egy újabb verziószerelvényre hivatkozik (például 1.7), és ha ezek az összetevők adatokat cserélhetnek.
A legjobb módja annak, hogy a közös nyelvi futtatókörnyezet betöltőt instruálja az újabb DLL használatára, ha az alkalmazás szintjén átirányítja az assembly verziókat. Megadhatja, hogy az alkalmazás a szerelvény újabb verzióját használja, ha szerelvénykötési információkat helyez el az alkalmazás konfigurációs fájljában. További információ a szerelvényverziók alkalmazásszintű átirányításáról: Szerelvényverziók átirányítása, különösen a "Szerelvénykötés megadása a konfigurációs fájlokban" című szakaszt.
A végrehajtható fájllal megegyező könyvtárban kell létrehoznia egy konfigurációs fájlt. A konfigurációs fájlnak ugyanazzal a névvel kell rendelkeznie, mint a végrehajtható fájlnak, amelyet a .config fájlkiterjesztés követ. Egy alkalmazás esetében például MyApp.exea konfigurációs fájlnak MyApp.exe.config fájlnak kell lennie. A konfigurációs fájl egy bindingRedirect elemet használ, hogy az összes korábbi verziót a legújabb verzióra lehessen leképezni, ahogyan az alábbi példában látható:
<bindingRedirect oldVersion="0.0.0.0-1.7.2600.xxxx" newVersion="1.7.2600.xxxx" />
A konfigurációs fájlokkal kapcsolatos további információkért, beleértve a konfigurációs fájl bővíthető korrektúranyelvének (XML) létrehozásának módját, tekintse meg bindingRedirect és Szerelvényverziók átirányításacímű témakört.
A Microsoft Windows XP Tablet PC Edition Development Kit 1.7-es és újabb verzióival létrehozott alkalmazások automatikusan a Microsoft.Ink szerelvény új verziójához vannak kötve. Az összeállítási kötésről további információt a „Hogyan találja meg a futtatókörnyezet a szerelvényeket” című témakörben talál.
Jegyzet
Ha alkalmazásszabályzatot használ a frissített szerelvényhez való kötéshez, az nem működik az Elválasztó osztályt vagy a PenInputPanel osztályt használó alkalmazások esetében. Az ilyen osztályokat használó alkalmazásoknak vagy továbbra is a Microsoft.Ink.15.dll-t kell használniuk, vagy újra kell őket fordítani, miután hivatkoznak a frissített assembly-re.
Események kezelése
Ha a felügyelt objektumok eseménykezelőjének kódja kivételt okoz, a kivétel nem lesz kézbesítve a felhasználónak. A kivételek kézbesítésének biztosításához használjon próbafogási blokkokat az eseménykezelőkben a felügyelt eseményekhez.
Űrlapok kezelése
A Űrlap osztály és annak alaposztályai nem határoznak meg véglegesítőt. Ha az erőforrásokat egy űrlapon szeretné megtisztítani, írjon egy olyan alosztályt, amely egy véglegesítőt (például a C# destruktort a ~használatával) biztosít, amely meghívja Dispose. A törlés végrehajtásához a véglegesítő felülbírálja a Dispose metódust, majd meghívja az alaposztály Dispose metódusát. Ne hivatkozzon azokra az objektumokra, amelyeknél a Véglegesítés metódust kell használni az Elidegenítés metódusban, ha a logikai paraméter HAMIS, mert előfordulhat, hogy ezek az objektumok már véglegesítve lettek. További információ az erőforrások kiadásáról: Metódusok és destruktorok véglegesítése.
Űrlapok és a RecognizerContext
RecognizerContext események másik szálon futnak, mint az űrlap szála. A Windows Forms vezérlői egy adott szálhoz vannak kötve, és nem biztonságosak. Ezért a vezérlő meghívási módszereinek egyikével kell végrehajtania a megfelelő szálra való meghívást. A vezérlő négy metódusa szálbiztos: a Invoke, BeginInvoke, EndInvokeés CreateGraphics metódusok. Minden más metódushíváshoz használja az alábbi meghívási metódusok egyikét egy másik szálról való híváskor. További információ a metódusok használatáról: Vezérlők kezelése a szálakból.
Várakozás eseményekre
A Táblagép PC-környezet többszálú. Használja a CoWaitForMultipleHandles függvényt más várakozási módszerek helyett, hogy az újra belépő Component Object Model (COM) hívások belépjenek a többszálú környezetbe (MTA), amíg az alkalmazás egy eseményre vár.
Szabadkézi-vonás gyűjtemények használata
A strokes gyűjtemény egyes elemei, amelyek egy tinta objektumból származnak, nem kerülnek szemétgyűjtésre. A memóriavesztés elkerülése érdekében minden alkalommal, amikor ezen gyűjtemények valamelyikével dolgozik, használja a "használat" utasítást az alább látható módon.
using (Strokes strokes = myInk.Strokes)
{
int i = strokes.Count;
}
Felügyelt objektumok és vezérlők letiltása
A memóriavesztés elkerülése érdekében kifejezetten meg kell hívnia az Dispose metódust minden olyan táblaszámítógép-objektumon vagy vezérlőelemen, amelyhez eseménykezelőt csatoltak, mielőtt az objektum vagy a vezérlő kikerül a hatókörből.
Az alkalmazás teljesítményének javítása érdekében manuálisan távolítsa el a következő objektumokat, vezérlőket és gyűjteményeket, ha már nincs rájuk szükség.
- Elválasztó
- tinta
- InkCollector
- InkEdit
- InkOverlay
- InkPicture
- PenInputPanel
- RecognizerContext
- Ecsetvonások
Az alábbi C#-példa bemutatja azokat a forgatókönyveket, amelyekben a Dispose metódust használják.
// A field for a Divider object
private Microsoft.Ink.Divider theDivider;
// A method that creates a Divider object
public void CreateDivider()
{
// Make sure any previous Divider object was disposed of.
if (null != theDivider)
{
theDivider.Dispose();
theDivider = null;
}
// Create the Divider object.
theDivider = new Microsoft.Ink.Divider();
// The remainder of the method
}
// A method that disposes of the Divider object
public void DisposeDivider()
{
// The remainder of the method
// Dispose of the Divider object.
if (null != theDivider)
{
theDivider.Dispose();
theDivider = null;
}
}
// A method that uses a local PenInputPanel object.
public void UsePenInputPanel()
{
// Create the PenInputPanel object.
Microsoft.Ink.PenInputPanel thePenInputPanel =
new Microsoft.Ink.PenInputPanel();
// The remainder of the method
// Dispose of the PenInputPanel object before exiting.
thePenInputPanel.Dispose();
thePenInputPanel = null;
}