Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Följande överväganden för Tablet PC-trådning är specifika för det hanterade biblioteket.
- Trådsäkerhet
- STA- och MTA-program
- Överväganden för trådhantering i Windows-formulär
- Överväganden för Urklipp
- undantag i händelsehanterare
- Att ta bort objekt och kontroller
- StylusInput-API:er
Thread-Safety
Tablet PC-plattformens hanterade biblioteksklasser är vanligtvis inte trådsäkra. Följande samlingar är trådsäkra på medlemsnivå. Dessa samlingar garanterar dock inte att en uppräknare skyddas om en annan tråd körs på samlingen samtidigt:
STA- och MTA-program
Hanterade program som skapats med hjälp av guiderna i Microsoft Visual Studio .NET är som standard entrådad lägenhet (STA). Du kan ändra lägenheten för ditt program genom att ange trådattributet STA-tråd eller flertrådad lägenhet (MTA) på startpunkten för ditt program.
Om programmet körs i en MTA måste du skriva trådsäker kod. Men genom att göra det kan du förbättra vissa prestandaproblem för händelsehantering.
Mer information om STA-tråden och MTA-trådattributen finns i STAThreadAttribute class och MTAThreadAttribute Class.
Överväganden för Trådning i Windows-formulär
Kontrollerna InkPicture och InkEdit utökar Windows Forms-kontrollerna. Windows Forms-kontroller använder sta-modellen (single-threaded apartment) eftersom Windows Forms baseras på inbyggda Win32-fönster som är enkelt trådade. I hanterad kod ska bläckkontroller skapas i samma tråd som huvudtråden för formuläret.
I ett STA-program inträffar vissa händelser i en annan tråd än programmets användargränssnittstråd. När du anropar ett Windows Forms-objekt eller -kontroll, inklusive InkPicture och InkEdit kontroller, från en Tablet PC-händelsehanterare, använder du objektet eller kontrollens ärvda Control.Invoke-metoden. Egenskapen InvokeRequired, som ärvts från klassen Control, kan användas för att avgöra om detta är nödvändigt.
I följande händelsehanterare för händelsen igenkänning testas till exempel egenskapen InvokeRequired och om TRUEanropas händelsehanteraren igen från användargränssnittstråden.
void recoContext_Recognition(object sender,
RecognizerContextRecognitionEventArgs e)
{
if (InvokeRequired)
{
Invoke( new RecognizerContextRecognitionEventHandler(
recoContext_Recognition ),
new object[] { sender, e } );
return;
}
// Use the recognition result here.
}
Om du placerar en UserControl- på awebpage i en webbläsare (se Web Controls) körs den som ett STA-program. För smarta klientprogram (se No Touch Deployment) har utvecklaren fullständig kontroll över ApartmentState-. (Standardvärdet är vanligtvis STA, men kan vara MTA, beroende på din version av CLR.) För problem med trådning som involverar RealTimeStylus, se Trådöverväganden för StylusInput API:er.
Mer information om hur du anropar Windows Forms från ett MTA-program finns i Multithreaded Windows Forms Control Sample.
Överväganden gällande Urklipp
Objektet Urklipp fungerar endast från en STA-tråd. När du försöker kopiera till eller klistra in från Urklipp i en tråd som inte är STA, får du en ThreadStateException. Om ditt program är MTA skapar du en STA-tråd för att hantera Urklipps metodanrop och några av de andra användargränssnittsaspekterna i ditt program.
Undantag inom händelsehanterare
Undantag kan inte genereras från händelsehanterare för Tablet PC. Om en händelsehanterardelegat för ett Tablet PC-objekt eller en samling till exempel har tre registrerade hanterare och den första genererar ett undantag, inträffar följande sekvens:
- Den första hanteraren avslutas.
- Undantaget går förlorat.
- Återstående hanterare anropas inte.
Ta bort objekt och kontroller
För att undvika en minnesläcka måste du uttryckligen anropa metoden Dispose på alla Tablet PC-objekt eller kontroller som en händelsehanterare har kopplats till innan objektet eller kontrollen hamnar utanför omfånget.
För att förbättra prestandan i ditt program ska du manuellt ta bort alla Tablet PC-objekt eller kontroller som implementerar metoden Dispose när objektet eller kontrollen inte längre behövs.
StylusInput-API:er
Information om trådhantering för RealTimeStylus--objektet och API:er för StylusInput-programmet finns under Threading Considerations för StylusInput API:er.