Condividi tramite


Plug-in e la classe RealTimeStylus

L'oggetto RealTimeStylus è progettato per fornire l'accesso in tempo reale al flusso di dati dalla penna del tablet. I plug-in, gli oggetti che implementano l'interfaccia IStylusSyncPlugin o IStylusAsyncPlugin possono essere aggiunti a un oggetto RealTimeStylus . I plug-in sincroni vengono in genere chiamati direttamente dall'oggetto RealTimeStylus su un thread ad alta priorità, mentre i plug-in asincroni vengono in genere chiamati sul thread dell'interfaccia utente dell'applicazione. Creare o usare plug-in sincroni per le attività che richiedono l'accesso in tempo reale al flusso di dati e che non richiedono un'applicazione computazionale, ad esempio il filtro dei pacchetti. Creare o usare plug-in asincroni per le attività che non richiedono l'accesso in tempo reale al flusso di dati, ad esempio la raccolta di input penna.

Alcune attività possono essere richieste dal calcolo, ma richiedono l'accesso in tempo reale al flusso di dati, ad esempio il riconoscimento dei movimenti multistroke. Per soddisfare queste esigenze, le API StylusInput forniscono un modello RealTimeStylus a catena che consente di usare due oggetti RealTimeStylus , ognuno in esecuzione nel proprio thread. Per altre informazioni sul modello RealTimeStylus a catena, vedere Modello RealTimeStylus cascaded.

Entrambe le interfacce IStylusSyncPlugin e IStylusAsyncPlugin definiscono gli stessi metodi. Questi metodi consentono all'oggetto RealTimeStylus di passare i dati della penna a ogni plug-in, indipendentemente dal fatto che si tratti di un plug-in asincrono o sincrono. Le proprietà Microsoft.StylusInput.IStylusSyncPlugin.DataInterest e Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest consentono a ogni plug-in di sottoscrivere dati specifici nel flusso di dati della penna del tablet. Un plug-in deve sottoscrivere solo i dati necessari per eseguire l'attività, riducendo al minimo le richieste di prestazioni. Per altre informazioni sul threading e sulla classe RealTimeStylus , vedere Considerazioni sul threading per le API StylusInput.

L'oggetto RealTimeStylus usa oggetti nello spazio dei nomi Microsoft.StylusInput.PluginData per passare i dati della penna ai relativi plug-in. RealTimeStylus rileva anche le eccezioni generate dai plug-in. Quando RealTimeStylus rileva le eccezioni, invia una notifica ai plug-in chiamando il metodo IStylusSyncPlugin.Error o IStylusAsyncPlugin.Error . Per altre informazioni sull'uso dei dati plug-in, vedere Plug-in Data (Dati plug-in) e RealTimeStylus Class (Classe RealTimeStylus ). Per altre informazioni sulla gestione degli errori, vedere Considerazioni sulla gestione degli errori per le API StylusInput e la sezione Dati degli errori dei dati dei plug-in e della classe RealTimeStylus.

Nota

Per abilitare l'oggetto RealTimeStylus , è necessario collegare almeno un plug-in all'oggetto RealTimeStylus .

 

Gli argomenti seguenti descrivono alcune categorie comuni di plug-in.

Considerazioni speciali

A causa della natura complessa dell'oggetto RealTimeStylus , tenere presente quanto segue.

L'oggetto RealTimeStylus genera un'eccezione se un plug-in modifica la raccolta di plug-in a cui è collegata. Ciò si verifica solo quando il plug-in viene chiamato dall'oggetto RealTimeStylus come membro di tale raccolta.

L'esempio C# seguente è il codice che fa sì che l'oggetto RealTimeStylus generi un'eccezione.

using Microsoft.Ink;
using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;

// ...
public class thePlugin : Microsoft.StylusInput.IStylusAsyncPlugin
{
    // ...

    // Called when a system gesture occurs.
    public void SystemGesture(RealTimeStylus sender, SystemGestureData data)
    {
        // The following line will cause the realtime stylus that calls this method
        // to throw an exception.
        sender.Dispose();
    }
    
    // ...
}

L'oggetto RealTimeStylus genera un'eccezione se un plug-in chiama il metodo Dispose dell'oggetto RealTimeStylus. Ciò si verifica solo quando il plug-in esegue questa operazione mentre viene chiamato dall'oggetto RealTimeStylus .

L'esempio C# seguente è il codice che fa sì che l'oggetto RealTimeStylus generi un'eccezione.

using Microsoft.Ink;
using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;

// ...
public class thePlugin : Microsoft.StylusInput.IStylusAsyncPlugin
{
    Microsoft.StylusInput.GestureRecognizer theGestureRecognizer;

    // ...

    // Called when a system gesture occurs.
    public void SystemGesture(RealTimeStylus sender, SystemGestureData data)
    {
        // The following line will cause the realtime stylus that calls this method
        // to throw an exception.
        sender.AsyncPluginCollection.Add(this.theGestureRecognizer);
    }
    
    // ...
}

Le raccolte plug-in possono essere modificate mentre l'oggetto RealTimeStylus è abilitato; Tuttavia, ciò può rendere più difficile la stima del comportamento dell'applicazione. Quando viene aggiunto un plug-in mentre l'oggetto RealTimeStylus è abilitato, l'oggetto RealTimeStylus chiama il metodo IStylusAsyncPlugin.RealTimeStylusEnabled o IStylusSyncPlugin.RealTimeStylusEnabled del plug-in. Quando un plug-in viene rimosso mentre l'oggetto RealTimeStylus è abilitato, l'oggetto RealTimeStylus chiama il metodo IStylusAsyncPlugin.RealTimeStylusDisabled o IStylusSyncPlugin.RealTimeStylusDisabled del plug-in. Ciò consente al plug-in di mantenere lo stato corretto senza dover controllare la proprietà Enabled dell'oggetto RealTimeStylus .

Quando viene aggiunto un plug-in mentre l'oggetto RealTimeStylus è abilitato, i dati plug-in ricevuti dal plug-in potrebbero non contenere informazioni sufficienti per stabilire adeguatamente il contesto dei dati iniziali. Ad esempio, il plug-in appena aggiunto potrebbe iniziare a ricevere i dati dei pacchetti da una penna a metà tratto. Analogamente, quando un plug-in viene rimosso mentre l'oggetto RealTimeStylus è abilitato, i dati plug-in ricevuti dal plug-in potrebbero non essere sufficienti per completare l'elaborazione dei dati.

Nota

Per la stabilità complessiva, reimpostare lo stato interno di un plug-in quando viene chiamato il metodo RealTimeStylusEnabled o RealTimeStylusDisabled .

 

Modello RealTimeStylus a catena

Considerazioni sulla gestione degli errori per le API StylusInput

Dati plug-in e classe RealTimeStylus

Considerazioni sul threading per le API StylusInput