スレッド化に関する一般的な考慮事項

タブレット PC 用に開発する際のスレッド処理に関する一般的な考慮事項を次に示します。

アプリケーション スレッドとアプリケーション以外のスレッド

すべてのインク イベントは、別の優先度の高いインク スレッドで生成されます。 これにより、アプリケーションの実行速度が遅い場合でも、インクがスムーズに流れます。 ただし、イベント ハンドラーはインクのレンダリングを遅くしたりブロックしたりする可能性があります。

バックグラウンド認識メソッド呼び出しによって生成されるすべての認識イベントは、個別の通常優先度のバックグラウンド認識スレッドで処理されます。

すべてのマウス イベントは、アプリケーションのメイン ユーザー インターフェイス (UI) スレッドで生成されます。

パフォーマンスに関する考慮事項

イベント ハンドラー

タブレット PC プラットフォーム アプリケーション プログラミング インターフェイス (API) には、通知モデルではなく、イベント用の対話型モデルがあります。 イベント ハンドラー内のコードを短くして、インクレンダリングがブロックされる時間を短縮します。 タブレット PC によるインクのコレクションはブロックされませんが、アプリケーションがブロックされている間、アプリケーションはインクを受け取りません。

AutoRedraw プロパティ

アプリケーションがカスタム レンダリングを実行している場合、またはアプリケーションが描画の問題に敏感な場合は、再描画を自分で処理し、InkCollector オブジェクト、InkOverlay オブジェクト、または InkPicture コントロールの AutoRedraw プロパティを false に設定できます。 次の表のイベントを使用して、再描画を処理します。

オブジェクトまたはコントロール Event
Inkcollector オブジェクト
基になるコントロールの Control.Invalidated イベントと Control.ペイント イベント。
Inkoverlay オブジェクト
基になるコントロールの Control.Invalidated イベントと Control.ペイント イベント。
Inkpicture コントロール
InkPicture コントロールの継承された Control.Invalidated イベントと Control.ペイント イベント。

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 スレッドまたはバックグラウンド認識スレッドで発生します。

ペン入力パネル イベント

PenInputPanel イベントは、 PenInputPanel オブジェクトが作成されるスレッドで発生します。

Microsoft.Ink.InkCollector.DynamicRendering

Microsoft.Ink.InkOverlay.DynamicRendering

Microsoft.Ink.InkPicture.DynamicRendering

Microsoft.Ink.InkCollector.AutoRedraw

Microsoft.Ink.InkOverlay.AutoRedraw

Microsoft.Ink.InkPicture.AutoRedraw