2017-05-04 32 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

相關問題