Anteckning
Å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.
Händelsehantering representerar en av de viktigaste aspekterna av programmeringsprogram för Microsoft Point of Service för .NET (POS för .NET). Alla indata i POS för .NET-systemet är händelsedrivna och varje segment i POS för .NET Architecture använder händelser för att kommunicera med andra program och tjänstobjekt.
Händelsedriven bearbetningsmodell
Händelsedrivna indata börjar när en ansluten POS-enhet tar emot dataindata. Om enheten är aktiverad (egenskapen DeviceEnabled är inställd på true) placeras mottagna data i kö som en DataEvent-händelse och skickas till programmet. Händelser levereras på ett först-i-först-ut-sätt av en intern tjänsttråd. Precis innan den här händelsen utlöses kan ett tjänstobjekt använda metoden PreFireEvent för att uppdatera egenskaper innan händelsen skickas.
När händelsedata har tagits emot inaktiverar enheten sig själv automatiskt (anger egenskapen DeviceEnabled till false) om egenskapen AutoDisable är inställd på true. När den är inaktiverad kan enheten inte köa nya indata och den fysiska enheten inaktiveras om möjligt.
När programmet är redo att ta emot indata från enheten anger det egenskapen DataEventEnabled till true. Programmet börjar sedan ta emot dataeventhändelser i kö, även om dataeventhändelsernaköades innan egenskapen DataEventEnabled angavs till true.
Ytterligare datahändelser kan inaktiveras genom att ange egenskapen DataEventEnabled eller FreezeEvents egenskapen till false. Detta gör att senare indata placeras i kö medan programmet bearbetar aktuella indata och associerade egenskaper. När programmet är redo för mer data kan det återaktivera händelser genom att ange egenskapen DataEventEnabled till true.
Händelsedriven indata och enhetsdelning
Om indataenheten är en exklusiv enhet måste programmet både göra anspråk på och aktivera enheten innan den används för att läsa indata.
Om enheten kan delas måste ett eller flera program öppna och aktivera enheten innan den används för att läsa indata. Ett program måste anropa anspråksmetoden för att begära exklusiv åtkomst till enheten innan tjänstobjektet skickar data till den med hjälp av DataEvent. Om händelsedrivna indata tas emot men enheten förblir oanmäld buffras indata tills ett program gör anspråk på enheten och egenskapen DataEventEnabled är inställd på true. Det här beteendet främjar ordnad delning av enheten mellan flera program, vilket effektivt skickar indatafokus mellan dem.
Händelsedriven indata- och felhantering
Enheten anger ett feltillstånd om ett fel påträffas när händelsedrivna indata tas emot. Sedan köar den en ErrorEvent-händelse (som innehåller InputData eller InputErrorEvent loci). Dessa händelser levereras inte förrän egenskapen DataEventEnabled har angetts till true för att garantera ordnad programsekvensering. Varje ErrorEvent anger vilken av två möjliga felloci som är ansvarig:
- InputData – Används om felet inträffade när en eller flera DataEvent-händelser placeras i kö. ErrorEvent hoppar till chefen för händelsekön för omedelbar hantering så att programmet omedelbart kan svara genom att rensa indata eller meddela användaren om felet. Slutför sedan bearbetningen av de buffrade indata.
- Input – Används om ett fel har inträffat och inga data är tillgängliga. Om indata redan är i kö när felet inträffar, placeras en ErrorEvent med InputData-locus i kö och levereras först. Sedan genereras och hanteras återstående DataEvents i kön. Slutligen skickas en ErrorEvent med indatavärdet för att indikera att kön är tom och att inga data är tillgängliga. Det är viktigt att observera att om en ErrorEvent med InputData-värdet levererades och programhändelsehanteraren svarade med ett Clear-värde levereras inte detta InputDataErrorEvent . Normalt anges det här felet i slutet av händelsekön.
Enheten kan avsluta feltillståndet när något av följande inträffar:
- Programmet returnerar från InputErrorEvent. Programmet returnerar från InputDataErrorEvent med ett Clear-värde för egenskapen ErrorResponse.
- Programmet anropar metoden ClearInput .
För vissa enheter måste programmet anropa en metod för att starta händelsedrivna indata. När indata har tagits emot av tjänstobjektet tas normalt inga ytterligare indata emot förrän metoden anropas igen. Exempel på enheter som använder den här varianten av händelsedrivna indata, även kallade asynkrona indata, är micr-enheter (magnetic ink character recognition) och Signature Capture.Examples for devices that use this variation of event-driven input, also known as asynchronous input, include the magnetic ink character recognition (MICR) and Signature Capture devices. Egenskapen DataCount kan läsas för att hämta antalet DataEvent-händelser i kön.
Alla indata i kön kan tas bort genom att anropa metoden ClearInput . ClearInput kan anropas efter Anspråk för enheter med exklusiv användning eller Öppna för delningsbara enheter.
Den allmänna händelsedrivna indatamodellen förhindrar inte definitionen av enhetsklasser som innehåller metoder eller egenskaper som returnerar indata direkt. Ett exempel på den här varianten av händelsedrivna indata, även kallat synkrona indata, är Keylock-enheten .
Typer av händelse
POS för .NET implementerar Unified Point Of Service-händelser (Unified Point Of Service) som standard.NET-händelser med multicast-ombud. Händelserna informerar ett program om olika aktiviteter eller ändringar med en enhet, till exempel när en enhet läggs till eller tas bort. I följande tabell visas händelsetyperna.
Händelse | beskrivning |
---|---|
DataEvent | En händelse som genereras av tjänstobjektet för att meddela programmet att indata är tillgängliga. |
ErrorEvent | En händelse som genereras av tjänstobjektet för att meddela programmet att ett enhetsfel har inträffat och att ett lämpligt svar från programmet är nödvändigt för att bearbeta felvillkoret. |
StatusUpdateEvent | En händelse som genereras av tjänstobjektet för att varna programmet om en ändring av enhetsstatus. |
OutputCompleteEvent | En händelse som genereras av tjänstobjektet för att meddela programmet att den köade utdatabegäran har slutförts. |
DirectIOEvent | En händelse som genereras av tjänstobjektet för att kommunicera information direkt till programmet. |
Tjänstobjektet måste stapla dessa händelser i en internt skapad och hanterad kö. Händelser levereras i första in-, första-ut-sättet och levereras av en intern tjänsttråd.
Följande villkor gör att händelseleveransen fördröjs tills villkoret har korrigerats:
- Programmet har angett egenskapen FreezeEvents till true. Egenskapen FreezeEvents tillåter att händelser placeras i kö men förhindrar leveransen tills FreezeEvents har angetts till false.
- Händelsen är en DataEvent eller en indata errorEvent men egenskapen DataEventEnabled är false.
Regler för hantering av händelseköer är följande:
- Enheten får bara köa nya händelser medan enheten är aktiverad.
- Enheten levererar köade händelser tills programmet anropar metoden Stäng eller, för enheter med exklusiv användning, metoden Release . När dessa metoder anropas tas eventuella återstående händelser i kön bort.
- Metoden ClearInput rensar DataEvents och indata för DeviceErrorEvents (ErrorLocus = Input eller InputData).
- Metoden ClearOutput rensar utdata för DeviceErrorEvents (ErrorLocus-utdata = ).