次の方法で共有


COM とオートメーションのスレッド処理に関する考慮事項

次のタブレット PC スレッドに関する考慮事項は、コンポーネント オブジェクト モデル (COM) とオートメーションを使用する場合に固有のものです。

スレッド セーフ

InkPicture コントロールと InkEdit コントロールを除き、Tablet PC オブジェクトはスレッド セーフであり、両方としてマークされます。 両方としてマークすることで、シングル スレッド アパートメント (STA) またはマルチスレッド アパートメント (MTA) のいずれかで実行できます。

Windows フォームは、本質的にアパートメント スレッド化されたネイティブ Win32 ウィンドウに基づいているため、Windows フォームでは STA モデルが使用されます。

STA および MTA アプリケーション

アプリケーションが MTA で実行されている場合、またはフリー スレッド マーシャラー (FTM) を使用している場合は、スレッド セーフなコードを記述する必要があります。ただし、これを行うことで、特定のイベント処理のパフォーマンスの問題を改善できます。

InkCollector と InkOverlay

アプリケーションは InkCollector または InkOverlay オブジェクトへの最終的な参照を解放しないようにし、インク スレッドから直接オブジェクトを破棄する必要があります。 代わりに、アプリケーションは、アプリケーション スレッドから InkCollector または InkOverlay オブジェクトを解放する必要があります。

注意: MTA とマークされているアプリケーションまたは FTM を使用するアプリケーション。これにより、インク スレッドからアプリケーションのアパートメントへの直接呼び出しが可能になります。 これにより、InkCollector オブジェクトまたは InkOverlay オブジェクトへの最終的な参照をインク スレッドから直接解放できます。ただし、これにより回復不能なアプリケーションエラーが発生します。

イベント シンク

アプリケーションが FTM を使用せず、オブジェクトとそのイベント シンクが別のアパートメントに作成されている場合、イベントはイベント シンクにサービスを提供するスレッドで実行されます。

イベント ハンドラー内の例外

Tablet PC イベント ハンドラー内からスローされた例外は使用され、残りの部分やアプリケーションには表示されません。 同様に、HRESULT 値は Tablet PC イベント ハンドラーから伝達されません。 COM レイヤーを使用するアプリケーションが例外をスローすると、バックグラウンド スレッドが終了し、例外が失われます。 追加のイベント ハンドラーは呼び出されません。

C++ イベント シンクのサンプル

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

マネージド ライブラリのスレッド処理に関する考慮事項