在 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.List
1[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()
这有效地强制例程同步执行。如果那不是你想要的,那么你需要探索不同的选择,例如评论中的建议。
我正在尝试通过一些 xml 文件和 return 解析结果到 UWA 中的数据网格。代码构建良好但是当 运行 它 returns
Unable to cast object of type 'System.Threading.Tasks.Task
1[System.Collections.Generic.List
1[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()
这有效地强制例程同步执行。如果那不是你想要的,那么你需要探索不同的选择,例如评论中的建议。