.netstandard库和UniversalApiContract
问题描述:
我建立一个.NETStandard库(1.3版), 使用异步等待库里面正常工作,直到我一个参考添加Windows.Foundation.UniversalApiContract。 添加此引用我得到的每一个错误的关键字等待我的代码中后.netstandard库和UniversalApiContract
这是错误
“IAsyncAction”不包含“GetAwaiter”,没有 扩展方法的定义“GetAwaiter”接受 型“IAsyncAction”的第一个参数可以发现
这是我需要运行的代码
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low,() => { OnUserChanged?.Invoke(user); });
去除等待关键字结果在一个工作代码,但我得到这样的警告
因为这个电话是不是等待,结束通话之前,在当前方法 的继续执行。考虑将“await” 运算符应用于调用的结果。
我该如何解决这个问题?
答
确保您的代码文件顶部有using System;
。这需要将IAsyncAction
转换为Task
。
如果不行,试试这个声明(只是为了看看代码编译和运行):
var a = CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low,() => { OnUserChanged?.Invoke(user); });
await System.WindowsRuntimeSystemExtensions.AsTask(a);
如果上述方法不为你工作,然后尝试临时升级到.NET标准1.4(再次,只是为了看它是否编译和运行)
如果这不起作用,那么可能会有一些与库引用搞砸了。
如果UWP特定,则不应添加此类引用。 –
当你像CoreApplication一样对WinRT类型进行硬编码时,你的库不会成为“标准”。而异步/等待在UWP应用程序中的工作方式非常不同,关键字没有什么特别明显的。由于它只能在UWP应用程序中运行,因此请考虑使用“类库(通用Windows)”项目模板来取得成功。 –
问题是我需要引发此事件,并且此事件将修改UI线程上的对象。如果我不打算使用“CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync”,我得到了跨线程访问 – frenk91