在uwa vb.net中的异步函数中返回列表

时间:2019-03-13 22:38:57

标签: vb.net asynchronous async-await win-universal-app

我正在尝试解析一些xml文件并将结果返回到UWA中的datagrid。代码构建良好,但运行时返回

  

无法转换类型为'System.Threading.Tasks.Task 1[System.Collections.Generic.List 1 [Festplatten_Archiv_Client.Drive]]'的类型为'System.Collections.IEnumerable'。

在我的XAML.vb中,我仅调用该类来创建文件并将结果设置为fileSource:

Public Sub New()
    InitializeComponent()
    dataGrid.ItemsSource = Drive.Drives
End Sub

如果我仅使用以下示例添加云端硬盘

,那可以正常工作
drivelist.Add(New Drive("Name",0, 0, 0), "location", "date"))

但是,由于我要解析XML,因此这是我的代码。 这是我的硬盘类:

 Public Shared Async Function Drives() As Task(Of List(Of Drive))
    Dim drivelist As New List(Of Drive)

    Dim folderpicked As StorageFolder
    Try
        folderpicked = Await StorageApplicationPermissions.FutureAccessList.GetItemAsync(ReadSetting("folderStorageToken"))
    Catch ex As Exception
        Debug.WriteLine("Fehler: " & ex.Message)
        folderpicked = Nothing
    End Try


    Dim xmlfiles As List(Of StorageFile) = Await folderpicked.GetFilesAsync()
    For Each file In xmlfiles
    ''Process files
    Next

    Return Await Task.Run(Function() drivelist)
End Function

这可能与异步编程有关,但是我对此很陌生。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以通过ctor对Async例程进行阻塞调用,如下所示:

Dim drivesResult = Drives().GetAwaiter().GetResult()

这有效地迫使例程同步执行。如果那不是您想要的,那么您将需要探索其他选择,例如评论中的建议。