WinRT: COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。

執筆日時:

f:id:daruyanagi:20140816205113p:plain

COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。

f:id:daruyanagi:20140816210519p:plain

なんかこんな感じの、まぁ、自分でもよくわからん感じの設計になっていたのだけど、ShareTargetPage の ViewModel でエラーが発生する。

問題のコードはこの部分。

protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var eventHandler = this.PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}

ここで InvalidCastException が出る……。かずきのBlog@hatena ともちょっと違うのだけど、どうせ似たような原因だと思う。

結果として別スレッドでコレクションを操作したため、エラーになるというWPFやSilverlightなどでおなじみのエラーパターンと同じでした。それにしても、何故InvalidCastExceptionなのだ!!

いろいろ試してみたが、結局、自分の場合は Visual Studio でデバッグ実行しているときだけ発生することが判明(?)。共有のテストをするときはデバッグ実行したアプリを終了してから行うという手段で回避できた。

いつか根本的に解決できるようになりたいです(小並