【发布时间】:2018-12-25 16:53:24
【问题描述】:
我正在开发 UWP 应用程序,需要在非 UI 代码中使用 TextBlock 类。尝试实例化 TextBlock 对象会产生“RPC_E_WRONG_THREAD(应用程序调用了为不同线程编组的接口)”异常。 根据我在 Internet 上收集的信息,我知道我应该在 UI 线程中执行我的代码。我使用了以下代码:
CoreDispatcher^ dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher;
dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler
[/* captured variables */]() {
TextBlock ^text_block = ref new TextBlock();
/* other code */
});
问题是,在尝试 TextBlock 实例化的那一刻,我收到了同样的异常。我做错了什么?
UPD: 我刚刚意识到我正在做的项目是一个 DirectX UWP 应用程序。是不是不能直接访问UI线程?
【问题讨论】:
-
您正在构建的 UWP 应用是否打开了多个窗口?你在哪里运行这段代码?
-
GetForCurrentThread() 不是你想要的。谷歌“uwp get dispatcher”,第一次点击就不错了。
-
@HansPassant 我没有找到任何其他与 C++ 相关的解决方案
-
@MartinZikmund 据我所知,它只打开了一个窗口。我在 Windows 10 模拟器上运行它。