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

Returning list in async function in uwa vb.net

我正在尝试通过一些 xml 文件和 return 解析结果到 UWA 中的数据网格。代码构建良好但是当 运行 它 returns

Unable to cast object of type 'System.Threading.Tasks.Task1[System.Collections.Generic.List1[Festplatten_Archiv_Client.Drive]]' to type 'System.Collections.IEnumerable'.

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

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

如果我只添加示例驱动器

,效果很好
drivelist.Add(New Drive("Name",0, 0, 0), "location", "date"))

但是因为我想通过 XML 进行解析,所以这是我的代码。 这是我的驱动器 class:

 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

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

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

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

这有效地强制例程同步执行。如果那不是你想要的,那么你需要探索不同的选择,例如评论中的建议。