2013-07-04 18 views
1

我正在为我的应用程序开发备份功能,它应该检查所需的文件夹是否已经存在,否则创建它。Live SDK:await client.GetAsync(“me/skydrive/files?filter = folders”)不返回

因为我使用VB.Net我不能使用GetCompleted事件(只有在C#中,我没有经验)。

我目前在FolderExistsOrCreate功能代码是这样的:

Private Async Function FolderExistsOrCreate(ByVal Name As String) As System.Threading.Tasks.Task(Of String) 
     Dim ID As String = Nothing 
     Dim firstRecheck = True 
ReCheck: 
     Try 
      _message = "Looking for folder..." 
      NotifyPropertyChanged("Message") 
      NotifyPropertyChanged("SkyDrive") 
      _client = New LiveConnectClient(_session) 
'it stops here and does not go further 
      Dim res = Await _client.GetAsync("me/skydrive/files?filter=folders,albums") 
      Dim folderData As Dictionary(Of String, Object) = DirectCast(res.Result, Dictionary(Of String, Object)) 
      Dim folders As List(Of Object) = DirectCast(folderData("data"), List(Of Object)) 

      For Each item As Object In folders 
       Dim folder As Dictionary(Of String, Object) = DirectCast(item, Dictionary(Of String, Object)) 
       If folder("name").ToString = Name Then 
        ID = folder("id").ToString() 
        _message = "Folder exists..." 
        NotifyPropertyChanged("Message") 
        NotifyPropertyChanged("SkyDrive") 
       End If 
      Next 

      If ID = Nothing Then 
       If firstRecheck = False Then 
        _message = "Creating folder failed..." 
        NotifyPropertyChanged("Message") 
        NotifyPropertyChanged("SkyDrive") 
        Return Nothing 
       End If 
       _message = "Creating folder..." 
       NotifyPropertyChanged("Message") 
       NotifyPropertyChanged("SkyDrive") 
       Dim newFolderData As New Dictionary(Of String, Object) 
       newFolderData.Add("name", Name) 
       _client = New LiveConnectClient(_session) 
       res = Await _client.PostAsync("me/skydrive", newFolderData) 
       firstRecheck = False 
       GoTo ReCheck 
      End If 
      Return ID 
     Catch ex As Exception 
      Return Nothing 
     End Try 
    End Function 

功能是在包含签到按钮,我已经建立了一个控制,我已经加了我的SkyDrive类的属性设置控制,并且它使用的_session是使用SignIn按钮创建的会话。

我得到一个有效的客户端,但是所有的GetAsync函数都会让应用程序暂停,没有任何异常。分配的范围包含“skydrive_update”,因此授予访问权限来创建文件夹,但代码甚至没有达到那么远。

我已经在MSDN上搜索过实时SDK论坛和论坛,可以找到任何类型的答案,但我可以找到的所有C#函数都是使用GetCompleted方法。

任何想法?

+0

你能解释一下为什么你不能在VB中使用'GetCompleted'?几乎总是如果你可以用C#做​​一些事情,你也可以在VB中做。 – svick

+0

它在VB.Net中不可用,他们在SDK文档中提到它。文件说这样做,但它不起作用。 –

+0

呵呵? GetCompleted是一个标准的EventHandler委托。绝对没有什么能够阻止你在VB.NET中订阅它。任何.NET API都可用于所有.NET语言。只有语言功能不同。 –

回答

1

我在猜测,你的呼叫堆栈进一步向上,你有一个电话WaitResult,从而导致deadlock that I describe on my blog

+0

现在用'.ConfigureAwait(False)'我得到一个异常'“无法投射类型为'Microsoft.Live.DynamicDictionary'的对象来键入' System.Collections.Generic.Dictionary'2 [System.String,System.Object]''在'await'操作之后的所有行上。所有文档都显示了c#代码,但是来自[此博客文章](http:// www .silverlightshow.net/items/SkyDrive-usage-through-Live-SDK-on-Windows-Phone.aspx)和我的理解似乎是正确的。 –

+0

得到它的工作,错过它是'IDictionary'而不是'字典' –

+0

@IzaacJohansson:在WP8上,正确的解决方法是用'await'替换'Wait' /'Result'。 –

相关问题