次の方法で共有


プラグインと RealTimeStylus クラス

RealTimeStylus オブジェクトは、タブレット ペンからデータ ストリームにリアルタイムでアクセスできるように設計されています。 IStylusSyncPlugin または IStylusAsyncPluginインターフェイス実装するオブジェクトは、RealTimeStylus オブジェクトに追加できます。 同期プラグインは、通常、優先度の高いスレッドの RealTimeStylus オブジェクトによって直接呼び出されますが、非同期プラグインは通常、アプリケーションのユーザー インターフェイス (UI) スレッドで呼び出されます。 データ ストリームへのリアルタイム アクセスを必要とし、パケット フィルタリングなどの計算上管理されていないタスクに対して同期プラグインを作成または使用します。 インク収集など、データ ストリームへのリアルタイム アクセスを必要としないタスクの非同期プラグインを作成または使用します。

特定のタスクでは、計算上要求が厳しいが、マルチストローク ジェスチャ認識など、データ ストリームへのリアルタイム アクセスが必要な場合があります。 これらのニーズに対応するために、StylusInput API はカスケードされた RealTimeStylus モデルを提供します。これにより、それぞれ独自のスレッドで実行されている 2 つの RealTimeStylus オブジェクトを使用できます。 カスケードされた RealTimeStylus モデルの詳細については、「カスケードされた RealTimeStylus モデルの を参照してください。

IStylusSyncPlugin インターフェイスと IStylusAsyncPluginインターフェイスの両方で同じメソッドが定義されます。 これらのメソッドを使用すると、RealTimeStylus オブジェクトは、非同期プラグインと同期プラグインのどちらであるかに関係なく、各プラグインにペン データを渡すことができます。 Microsoft.StylusInput.IStylusSyncPlugin.DataInterest と microsoft.StylusInput.IStylusAsyncPlugin.DataInterest プロパティを すると、各プラグインはタブレット ペン データ ストリーム内の特定のデータをサブスクライブできます。 プラグインは、そのタスクを実行するために必要なデータのみをサブスクライブして、パフォーマンスの要求を最小限に抑える必要があります。 スレッド処理と RealTimeStylus クラスの詳細については、「StylusInput API スレッドに関する考慮事項」を参照してください。

RealTimeStylus オブジェクトは、Microsoft.StylusInput.PluginData 名前空間内のオブジェクトを使用して、ペン データをプラグインに渡します。RealTimeStylus では、プラグインによってスローされた例外もキャッチされます。RealTimeStylus が例外をキャッチすると、IStylusSyncPlugin.Error または IStylusAsyncPlugin.Error メソッド 呼び出してプラグインに通知します。 プラグイン データの使用の詳細については、「プラグイン データと RealTimeStylus クラス」を参照してください。 エラー処理の詳細については、「StylusInput API のエラー処理に関する考慮事項」および「プラグイン データ」および「RealTimeStylus クラス」の「エラー データ」セクションを参照してください。

手記

RealTimeStylus オブジェクトを有効にするには、少なくとも 1 つのプラグインを RealTimeStylus オブジェクトにアタッチする必要があります。

 

次のトピックでは、プラグインのいくつかの一般的なカテゴリについて説明します。

特別な考慮事項

RealTimeStylus オブジェクトの複雑な性質のため、次の点に注意してください。

RealTimeStylus オブジェクトは、プラグインがアタッチ先のプラグイン コレクションを変更した場合に例外をスローします。 これは、プラグインがそのコレクションのメンバーとして RealTimeStylus オブジェクトによって呼び出されている間にのみ発生します。

次の C# の例は、RealTimeStylus オブジェクトが例外をスローするコードです。

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();
    }
    
    // ...
}

RealTimeStylus オブジェクトは、プラグインが RealTimeStylus オブジェクトの Dispose メソッドを呼び出すと、例外をスローします。 これは、プラグインが RealTimeStylus オブジェクトによって呼び出されている間にのみ発生します。

次の C# の例は、RealTimeStylus オブジェクトが例外をスローするコードです。

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);
    }
    
    // ...
}

プラグイン コレクションは、RealTimeStylus オブジェクトが有効になっている間に変更できます。ただし、これにより、アプリケーションの動作の予測が困難になる可能性があります。 RealTimeStylus オブジェクトが有効になっている間にプラグインが追加されると、RealTimeStylus オブジェクトは、プラグインの IStylusAsyncPlugin.RealTimeStylusEnabled または IStylusSyncPlugin.RealTimeStylusEnabled メソッド を呼び出します。 RealTimeStylus オブジェクトが有効になっている間にプラグインが削除されると、RealTimeStylus オブジェクトは、プラグインの IStylusAsyncPlugin.RealTimeStylusDisabled または IStylusSyncPlugin.RealTimeStylusDisabled メソッド を呼び出します。 これにより、プラグインは、RealTimeStylus オブジェクトの Enabled プロパティを確認しなくても、適切な状態を維持できます。

RealTimeStylus オブジェクトが有効になっている間にプラグインが追加されると、プラグインが受け取るプラグイン データに、初期データのコンテキストを適切に確立するのに十分な情報が含まれていない可能性があります。 たとえば、新しく追加されたプラグインは、中間ストロークのペンからパケット データの受信を開始できます。 同様に、RealTimeStylus オブジェクトが有効になっている間にプラグインが削除された場合、プラグインが受け取ったプラグイン データが、データの処理を完了するには不十分である可能性があります。

手記

全体的な安定性のために、RealTimeStylusEnabled または RealTimeStylusDisabledメソッド呼び出されたときにプラグインの内部状態をリセットします。

 

カスケードされた RealTimeStylus モデル する

StylusInput API のエラー処理に関する の考慮事項

プラグイン データと RealTimeStylus クラス

StylusInput API スレッドに関する考慮事項