c# - 使用异步回调了解 Dispatcher.RunAsync 并等待 UI 相关任务
问题描述
我将 C# + UWP 用于常规桌面应用程序并创建兼容的统一版本。我使用了几个 API 调用,例如必须从 STA 线程使用的 MediaCapture.InitializeAsync。
下面的代码适用于桌面应用程序:
var ignored = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
Debug.WriteLine("Step 1 " + Dispatcher.HasThreadAccess);
//access STA API calls here
await Task.Delay(1000);
Debug.WriteLine("Step 2 " + Dispatcher.HasThreadAccess);
//access STA API calls here
});
它将打印“Step 1 True”,一秒后打印“Step 2 True”。我认为这意味着它们都在 UI 线程中运行并且我可以访问与 UI 相关的 API 调用?
到目前为止,这一直很好,直到我通过 Unity 触发了上述方法。它将打印“Step 1 True”,一秒后打印“Step 2 False”。所以它出现在等待调用之后我不再在 UI 线程上。
这里到底发生了什么?
解决方案
你在使用一些古老版本的 Unity 吗?这曾经是一个已知问题,但他们在几年前修复了它:
https://issuetracker.unity3d.com/issues/uwp-messagedialog-class-causes-crash-on-il2cpp-backend
推荐阅读
- python - TensorFlow 异常:模块 'tensorflow.tools.api.generator.api.math' 没有属性 'log'
- apache-flex - Flex mxmlc ant 任务给出 java.lang.OutOfMemoryError: Java heap space
- scala - 如何构建多个 Spark 数据帧并并行运行?
- microsoft-graph-api - 如何将 onedrive 文件共享给组织外的人员
- go - 如何使用gorm创建到mysql的ssl连接?
- angularjs - 使用 angularjs 显示 API 内容
- linux - rc.local 的环境
- python - 无法用尽加载更多按钮来揭开所有头条新闻
- c - 拆分字符串并使用索引来调用所需的元素
- swift - 与 collectionView.reloadItems[at: [indexPath]] 重叠标签值