スレッド処理に関する一般的な考慮事項
タブレット PC 用に開発する場合のスレッドに関する一般的な考慮事項を次に示します。
アプリケーション スレッドとアプリケーション以外のスレッド
すべてのインク イベントは、優先度の高い別のインク スレッドで生成されます。 これにより、アプリケーションの実行速度が遅い場合でも、インクの流れがスムーズになります。 ただし、イベント ハンドラーはインクのレンダリングを遅くしたり、ブロックしたりする可能性があります。
バックグラウンド認識メソッドの呼び出しによって生成されたすべての認識イベントは、別の通常優先度のバックグラウンド認識スレッドで処理されます。
すべてのマウス イベントは、アプリケーションの メイン ユーザー インターフェイス (UI) スレッドで生成されます。
パフォーマンスに関する考慮事項
イベント ハンドラー
Tablet PC Platform アプリケーション プログラミング インターフェイス (API) には、通知モデルではなく、イベント用の対話型モデルがあります。 イベント ハンドラー内のコードを短くして、インク レンダリングがブロックされる時間を短縮します。 タブレット PC によるインクのコレクションはブロックされませんが、アプリケーションがブロックされている間、アプリケーションはインクを受け取りません。
AutoRedraw プロパティ
アプリケーションがカスタム レンダリングを実行している場合、またはアプリケーションが問題の描画に敏感な場合は、再描画を自分で処理し、InkCollector オブジェクト、InkOverlay オブジェクト、または InkPicture コントロールの AutoRedraw プロパティを false に設定できます。 次の表のイベントを使用して、再描画を処理します。
オブジェクトまたはコントロール | Event |
---|---|
Inkcollector オブジェクト |
基になるコントロールの Control.Invalidated イベントと Control.Paint イベント。 |
Inkoverlay オブジェクト |
基になるコントロールの Control.Invalidated イベントと Control.Paint イベント。 |
Inkpicture コントロール |
InkPicture コントロールの継承された Control.Invalidated イベントと Control.Paint イベント。 |
DynamicRendering プロパティ
アプリケーションでカスタム レンダリングを実行している場合、またはインクではなく情報が必要な場合は、InkCollector オブジェクト、InkOverlay オブジェクト、または InkPicture コントロールの DynamicRendering プロパティを false に設定することで、インクの配置を自分で処理し、インクのリアルタイム レンダリングをオフにすることができます。
イベント スレッドに関する考慮事項
タブレット PC プラットフォーム API イベントは、さまざまなスレッドで発生します。
InkCollector および InkOverlay オブジェクト イベント
InkCollector および InkOverlay オブジェクトのイベントのほとんどは、インク スレッドで発生します。 UI スレッドでは、これらのオブジェクトのマウス イベントのみが発生します。 たとえば、 InkCollector オブジェクトの場合、UI スレッドで MouseDown イベントが発生し、インク スレッドで CursorDown イベントが発生します。
Ink オブジェクトと Strokes コレクション イベント
Ink オブジェクトと Strokes コレクション イベントは、インク スレッドまたは UI スレッドから取得できます。 アプリケーションが Ink オブジェクトまたは Strokes コレクションを操作すると、イベントが UI スレッドで生成されます。 InkCollector オブジェクトまたは InkOverlay オブジェクトが Ink オブジェクトまたは Strokes コレクションを更新すると、インク スレッドでイベントが生成されます。
InkPicture コントロールと InkEdit コントロールは、シングル スレッド アパートメント (STA) で動作します。 InkPicture コントロールまたは InkEdit コントロールが Ink オブジェクトまたは Strokes コレクションを更新すると、UI スレッドでイベントが発生します。
認識イベント
認識イベントは、UI スレッドまたはバックグラウンド認識スレッドで発生します。
- InkEdit コントロールの Recognize メソッドは、UI スレッドで Recognition (Managed Library のみ) または RecognitionResult (Automation のみ) イベントを発生させます。
- RecognizerContext オブジェクトの BackgroundRecognize メソッドと BackgroundRecognizeWithAlternates メソッドは、バックグラウンド認識スレッドで Recognition イベントと RecognitionWithAlternates イベントを発生させます。
ペン入力パネル のイベント
PenInputPanel イベントは、 PenInputPanel オブジェクトが作成されるスレッドで発生します。