2017-05-04 42 views
2

我建立一个.NETStandard库(1.3版), 使用异步等待库里面正常工作,直到我一个参考添加Windows.Foundation.UniversalApiContract。 添加此引用我得到的每一个错误的关键字等待我的代码中后.netstandard库和UniversalApiContract

这是错误

“IAsyncAction”不包含“GetAwaiter”,没有 扩展方法的定义“GetAwaiter”接受 型“IAsyncAction”的第一个参数可以发现

这是我需要运行的代码

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low,() => { OnUserChanged?.Invoke(user); }); 

去除等待关键字结果在一个工作代码,但我得到这样的警告

因为这个电话是不是等待,结束通话之前,在当前方法 的继续执行。考虑将“await” 运算符应用于调用的结果。

我该如何解决这个问题?

+0

如果UWP特定,则不应添加此类引用。 –

+1

当你像CoreApplication一样对WinRT类型进行硬编码时,你的库不会成为“标准”。而异步/等待在UWP应用程序中的工作方式非常不同,关键字没有什么特别明显的。由于它只能在UWP应用程序中运行,因此请考虑使用“类库(通用Windows)”项目模板来取得成功。 –

+0

问题是我需要引发此事件,并且此事件将修改UI线程上的对象。如果我不打算使用“CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync”,我得到了跨线程访问 – frenk91

回答

0

确保您的代码文件顶部有using System;。这需要将IAsyncAction转换为Task

如果不行,试试这个声明(只是为了看看代码编译和运行):

var a = CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low,() => { OnUserChanged?.Invoke(user); }); 

await System.WindowsRuntimeSystemExtensions.AsTask(a); 

如果上述方法不为你工作,然后尝试临时升级到.NET标准1.4(再次,只是为了看它是否编译和运行)

如果这不起作用,那么可能会有一些与库引用搞砸了。

+0

这是我第一件检查和使用有 – frenk91

+0

你看到'System.WindowsRuntimeSystemExtensions.GetAwaiter(..)'? – Laith

+0

我只在描述中遇到错误“'IAsyncAction'没有包含'GetAwaiter'的定义,也没有找到接受'IAsyncAction'类型的第一个参数的扩展方法'GetAwaiter'” – frenk91

相关问题