私の WPF アプリケーションには、QuickTime のラッパーとして機能するクラスがあります。私が必要とするすべての特定の機能または単純化された機能を提供します。機能させるには、QuickTime の ActiveX コントロールのインスタンスを作成し、それを有効な Windows フォーム ウィンドウに配置する必要があります。私のアプリは WPF で、コンストラクターは次のように機能します。
public VideoPlayerQT(WindowsFormsHost wfHost) {
AxQTControl qtControl = new AxQTControl();
wfHost.Child = qtControl;
}
メインウィンドウで、プレーヤーを次のように使用します。
private VideoPlayerQT videoPlayer;
private void MainWindow_Loaded(object sender, RoutedEventArgs e) {
this.videoPlayer = new VideoPlayerQT(myWinFormsHost);
}
これは、WindowsFormsHost を TabControl 内に配置するまで機能します。最初から表示されていないタブに配置したい。
これにより、奇妙な動作が発生します。VideoPlayerQT
オブジェクトのコンストラクターはAxQTControl
、提供された の中にを配置しようとしWindowsFormsHost
ますが、まだ表示されていないタブにあると、QuickTime コントロールは をスローしInvalidActiveXStateException
ます。私は、ActiveX / COM コントロールがそれをスローすると考えています。WindowsFormsHost
親タブをクリックして表示するまで、「無効な ActiveX 状態」にあると思います。
私の質問は次のとおりです。どのイベント ハンドラー (どのオブジェクト上) でプレーヤーを構築する必要がありますか? Window_Loaded が発火したときのように、最初は非アクティブな TabItem 内の WindowsFormsHost が準備ができて読み込まれたのはいつですか?