- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个程序,用户可以在其中查看保存在 XAML 中的各种 3D 模型,然后使用 TrackballDecorator 操作 Viewport3D。这些 XAML 文件中包含转换,我使用问题 WPF 3D - How can I save and load a Camera view? 的答案中的修改将其应用于 TrackballDecorator。
我最近将项目切换到 .net 4.5 框架以利用 XamlReader 类的新异步功能,这导致与我访问随模型保存的转换的方式发生冲突。
我目前正在做的是:
private Task<TrackballDecorator> loadModel(string path)
{
var tempVP = new XamlReader().LoadAsync(XmlReader.Create(path)) as Viewport3D;
return new TrackballDecorator() { Content = tempVP, Transform = (tempVP.Camera.Transform as Transform3DGroup) };
}
这不起作用,因为 XamlReader 未完成加载,因此返回 null Transform。
我想做的是:
private async Task<TrackballDecorator> loadModelAsync(string path)
{
var tempVP = await new XamlReader().LoadAsync(XmlReader.Create(path)) as Viewport3D;
return new TrackballDecorator() { Content = tempVP, Transform = (tempVP.Camera.Transform as Transform3DGroup) };
}
但是因为 LoadAsync 方法返回一个 object
而不是 Task<object>
我不能使用 await 关键字。有什么方法可以克服或解决此限制?
最佳答案
这里有两个问题。
一方面,将 EAP 操作转换为任务的“规范”方法是使用 TaskCompletionSource并返回源的 Task属性(property)。事件处理程序调用 SetResult表示任务已完成并设置其结果。
你可以这样写:
public Task<ViewPort3D> LoadViewPortAsync(string path)
{
var tcs=new TaskCompletionSource();
var reader=XmlReader.Create(path);
ViewPort3D port=null;
var xr = new XamlReader();
xr.LoadCompleted += (o,e)=>{
tcs.SetResult(port);
reader.Dispose();
};
port=xr.LoadAsync(reader);
return tcs.Task;
}
一旦获得 ViewPort3D 对象,就可以创建转换
另一方面,“规范的”WPF 方法是观察发生变化的对象并对它们的变化使用react。 LoadAsync 返回根 XAML 对象并向其异步添加节点。由 ViewPort3D 适本地引发 INotifyPropertyChanged 并由 TrackballDecorator 和 Transforms 对这些变化使用react。
使用 TaskCompletionSource 只是第二个问题的解决方法。
关于c# - 可以等待 XamlReader.LoadAsync() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18089183/
我正在通过创建一些项目来学习 React Native。 我卡住了,无法加载自定义字体。我关注了this来自世博会文档的指南。但是我收到一个错误 fontFamily "raleway-bold" i
// Asynchronously load and execute a script from a specified URL function loadasync(url) { var head
假设我正在使用线程,它在 Windows::Storage::Streams::DataReader (m_reader) 的帮助下从网络套接字 (Windows::Networking::Socke
我正在尝试通过 WebAPI 调用从 RavenDb 加载文档。当我打开一个异步 IDocumentSession 并调用 LoadAsync 时,我没有得到任何异常或结果,线程立即退出,没有错误代码
当我遇到问题时,我正在我的项目中添加一些异步调用。 Session 和 AsyncSession 之间的相同调用没有返回我的文档。 这里是文档: class Company { string
我有一个程序,用户可以在其中查看保存在 XAML 中的各种 3D 模型,然后使用 TrackballDecorator 操作 Viewport3D。这些 XAML 文件中包含转换,我使用问题 WPF
我正在尝试通过 StreamSocket 发送 HTTP 请求,但响应被 chop 为 “failedWinRTError:对象已关闭。” 这是我的代码: var count, hostName,
我的 Windows Phone 8 应用程序中有以下代码。 //connection code, done during app start socket = new StreamSocket();
我想将数据库中的图像异步加载到图片框中。我该怎么做?现在我有: byte[] byteBLOBData = new byte[0]; byteBLOBData = (byte[])ds.Tables[
我正在将 React Native 与 Expo 结合使用,除了自定义字体的问题之外,一切都很顺利。我的字体 Lobster-Regular.ttf 在 ./assets/fonts 中,并且我一直在
我正在创建一个 Win 8 商店应用程序,我在其中使用 StreamSocket 连接到一个用 Java 编写的服务器。当我在调试中运行应用程序时,在 StreamSocket.ConnectAsyn
我在使用 Windows 8 UI 应用程序时遇到问题。我正在使用客户端-服务器通信,客户端需要一直检查新消息。所以我使用这样的代码,其中 _socket 是一个 StreamSoket: p
import React, { Component } from 'react'; import { View, TextInput, } from 'react-native'; imp
我的应用程序使用 CRNA 和 Expo,我的问题是 Font.loadAsync() 异步函数无法在我的项目目录的 asset/fonts/文件夹中找到 .otf 字体文件。我绝对确定目录和文件名是
我正在使用 C# 在 WinRT 上编写一个客户端应用程序,它通过 TCP 连接到多个服务器。对于 TCP 连接,我使用 StreamSocket。然后将输入和输出字符串包装在 DataWriter
我使用以下代码在 UWP WinRT 上使用 JSON 流: async function connect() { let stream: MSStream; return new C
有没有办法将 PictureBox 绑定(bind)到字符串,以便当字符串发生变化时,它会使用字符串中的 url 调用 LoadAsync() 并加载图像? 目前这是我在自动生成的代码中所拥有的。 t
我有一个 React Native,React 混合应用程序。对于 React Native,我使用的是 react-native-elements。 我的应用程序使用 Expo 运行,并使用 rea
这是react expo项目,使用react-native-form-validation进行验证时出现错误。 0 && errors.fullName} status={errors.fu
这是react expo项目,使用react-native-form-validation进行验证时出现错误。 0 && errors.fullName} status={errors.fu
我是一名优秀的程序员,十分优秀!