我正在使用 WRL 将常规 C++ 应用程序移植到 C++ 中的 Metro。我有一个现有的线程池,并且在某些时候我需要从这些线程之一更新 UI。
直接触摸 UI 对象会产生预期的 RPC_E_WRONG_THREAD,因此我需要以某种方式在正确的线程中执行。查看 MSDN,我发现 Metro Dispatcher (CoreDispatcher) 有一个 RunAsync 方法。
Larry Osterman 在这里回答了如何使用它的问题: Run code on UI thread in WinRT
但不清楚的是,我是否可以从非 winrt 线程(即未调用 RoInitialize 的线程)执行此操作。
我想更准确地说,我担心调度程序可能属于 STA,我需要以某种方式编组接口,以便从我的其他线程调用是安全的。
请注意,我的应用程序在 msdn 示例之后的 main() 函数调用 RoInitialize(RO_INIT_MULTITHREADED)。