タッチ ディスプレイのケーブルを抜き差しすると、WPF アプリケーション上でタッチおよびスタイラス操作ができなくなる

こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、タッチディスプレイを接続したコンピューターにおいて、タッチやスタイラスで WPF アプリケーションを操作する場合の問題についてご案内します。

 

現象

コンピューターに接続しているタッチ ディスプレイのケーブルを抜き差しすると、稀に WPF アプリケーション上でタッチおよびスタイラス操作ができなくなる問題が確認されています。
この問題が発生すると、WPF アプリケーションを再起動するまで、WPF アプリケーション上のタッチおよびスタイラス操作が行えなくなります。

 

詳細

コンピューターに接続しているタッチ ディスプレイのケーブルを抜き差しすると、Windows はデバイスの抜去、接続状態を検出し、全てのトップレベル ウィンドウに対して、新しいデバイスとしてタッチ ディスプレイが有効になったことを通知します。
この通知を受け取った WPF アプリケーションは、アプリケーションで管理・制御しているタッチおよびスタイラス用の内部情報を初期化して、新しいデバイス上でのタッチおよびスタイラス操作に備えます。

ところが、Windows ならびに .Net Framework (WPF) の内部処理において、タッチおよびスタイラス関連の処理が、適切に制御されないという問題がありました。
こうした問題により、新しいデバイスとしてタッチ ディスプレイが接続されたにも関わらず、WPF アプリケーションでは既存の内部情報を適切に初期化することができず、ユーザーがタッチおよびスタイラス操作を行っても、WPF アプリケーションがそれを検出できないという問題が発生します。

 

原因

本現象は、以下のバージョンの .NET Framework (WPF) および Windows の問題です。
弊社製品の問題によりご不便をおかけしますことを、深くお詫びいたします。

  • Windows 7 SP1
  • Windows 8
  • Windows 8.1
  • Windows 10
  • .NET Framework 4.0 (WPF 4.0) 以降

 

回避策

本現象は、Windows 10 Creators Update および Windows 10 Creators Update 同梱の .NET Framework 4.7 で修正されました。

.NET Framework 4.7 List of Changes
- Previously, large amounts of connects and disconnects of tablet/stylus devices could result in WPF losing all touch support except for promoted mouse messages.
This was due to a reference counting issue within WPF and its Windows side touch component (WISP).
This change, along with the associated WISP change available in RS2, fixes this situation allowing large numbers of connects and disconnects. [174153]