WPF の マルチスレッド UI アーキテクチャ HostVisual

先日 Silverlight 5 の新しいスレッド アーキテクチャ Composition Thread を紹介しました。

WPF には全く同じスレッド アーキテクチャはありませんが、アニメーションなどがインタラクションを邪魔しないためのマルチスレッド UI アーキテクチャ HostVisual を以前から持っています。2007年に Dwayne Need のブログで紹介されています。

しかし、HostVisual の使い方は CompositionThread ほど容易ではありません。それは以下の2つの理由のためです。

  1. HostVisual は、UIElement ではなく Visual から派生されているので、そのままでは既存のパネルに配置できない
  2. レイアウト イベントやロード イベントが発生しない

Dwayne Need は、前者のために VisualWrapper クラス(FrameworkElement を継承)を作成し、後者のために VisualTargetPresentationSournce クラス(PresentationSource を継承)を作成しています。サンプルコードもDwayne Need のブログにあるので、参照してください。

当然ですが、バックグラウンド スレッドで動作する HostVisual ではユーザーとの対話操作はできません。ストーリーボードやメディアの再生のような用途に向いています。

image