Возвращение списка в асинхронной функции в UWA vb.net - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь проанализировать некоторые xml-файлы и вернуть результаты в таблицу данных в UWA. Код строится нормально, но при запуске возвращает

Невозможно привести объект типа '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

Что отлично работает, если я добавлю только образец Drive с

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 голосов
/ 14 марта 2019

Вы можете сделать блокирующий вызов подпрограммы Async из ctor следующим образом:

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

Это фактически заставляет подпрограмму выполняться синхронно. Если это не то, что вы хотите, то вам нужно изучить другую альтернативу, например, предложение в комментариях.

...