WRLを使用して、通常のC++アプリをC++のメトロに移植しています。既存のスレッドプールがあり、その時点で、これらのスレッドの1つからUIを更新する必要があります。
UIオブジェクトに直接触れると、期待されるRPC_E_WRONG_THREADが得られるため、適切なスレッドで実行する必要があります。MSDNを見ると、メトロディスパッチャー(CoreDispatcher)にRunAsyncメソッドがあることがわかりました。
Larry Ostermanは、ここでそれをどのように使用するかという質問に答えます 。WinRTのUIスレッドでコードを実行します。
しかし、明確ではないのは、Winrt以外のスレッド、つまりRoInitializeを呼び出していないスレッドからそれを実行できるかどうかです。
もっと正確に言うと、ディスパッチャがSTAに属している可能性があり、他のスレッドから安全に呼び出すことができるように、何らかの方法でインターフェイスをマーシャリングする必要があるのではないかと思います。
msdnサンプルに続く私のアプリのmain()関数は、RoInitialize(RO_INIT_MULTITHREADED)を呼び出すことに注意してください。