2013-12-15 70 views
4

我正在VS2012上開發WP7.1應用程序。無法等待「無效」錯誤

我想使用Live SDK上傳文件到Skydrive。然而,當我實現它是作爲一個樣本上msdn.com的事件處理程序方法,我得到了錯誤「無法等待‘無效’」在這裏:

private async void btnSignin_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e) 
    { 
     if (e.Status == LiveConnectSessionStatus.Connected) 
     { 
      client = new LiveConnectClient(e.Session); 
      LiveOperationResult operationResult = await client.GetAsync("me"); 

我已經安裝了這個(http://blogs.msdn.com/b/bclteam/archive/2012/10/22/using-async-await-without-net-framework-4-5.aspx?PageIndex=2)庫,但它只解決了「異步」關鍵字的問題。

+0

您只能'await'具有'GetAwaiter'方法的對象。 'void'不是一個對象,因此沒有方法。 –

+1

就這樣我們很清楚,['GetAsync()'](http://msdn.microsoft.com/en-us/library/live/hh534049.aspx)調用正確的錯誤發生了嗎?它不返回'void',所以我不明白爲什麼它會導致這個錯誤。 –

回答

4

LiveConnectClient可能使用基於事件的異步模式,該模式不能直接轉換爲await的有效方法。您可以使用TaskCompletionSource作爲described on MSDN here將EAP包裝爲Task

+2

啊,[這個問題和答案](http://stackoverflow.com/questions/14321190/liveconnectclient-missing-eventhandlers-live-sdk-5-3-wp8)似乎表明,舊版本的SDK是事件基。我想如果可能的話,他應該只是得到最新版本。 –

+0

@JeffMercado:我相信(當前)SDK在Windows Phone 7 *上使用基於事件的API *(而Win8/WP8上的相同SDK使用TAP)。所以我懷疑op調用的實際'GetAsync'是[this method](http://msdn.microsoft.com/en-us/library/live/hh534050),導致[this event](http:// msdn.microsoft.com/en-us/library/live/microsoft.live.liveconnectclient.getcompleted)。 –