Megosztás a következőn keresztül:


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.

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;
}