2016-05-25 3 views
4

Следующий код не будет скомпилирован, поскольку IsOfType не будет использоваться как метод для элемента. В документации говорится:Невозможно использовать IStorageItem для StorageFile

Когда этот метод завершается успешно, она возвращает IStorageItem , представляющее указанный файл или папку. Если указанный файл или папка не найден, этот метод возвращает null вместо повышения исключения .

Чтобы работать с возвращенным элементом, вызовите метод IsOfType интерфейса IStorageItem , чтобы определить, является ли элемент файлом или папкой . Затем переместите элемент в StorageFolder или StorageFile.

private async void RestoreData(string fileName) 
    { 
     StorageFolder folder = ApplicationData.Current.LocalFolder; 
     var item = folder.TryGetItemAsync(fileName); 
     if (item == null) 
     { 
      existingData = false; 
     } 
     if (item.IsOfType(StorageItemTypes.File)) 
     { 
      await ReadDataAsync(item as StorageFile); 
      existingData = true; 
     } 
     existingData = false; 
    } 

ответ

3

У вас не хватает await ключевое слово, чтобы дождаться результата метода асинхронной - в этом случае вы должны написать что-то вроде этого:

var item = await folder.TryGetItemAsync(fileName); 

Благодаря этому item имеет тип IStorageItem, тогда как в ваш код был типа IAsyncOperation<IStorageItem>.

К convention, все методы асинхронного программирования имеют Async суффикс, и вам нужно подождать результата, чтобы его проверить.

Совет:

В большинстве Иды при наведении курсора мыши на var ключевое слово, будет отображаться тип переменной - что делает его гораздо легче найти ошибку.

+0

Doh. Я заметил, что тип был IAsyncOperation , но я не понимал, что это была подсказка, что ожидания не хватало. – Robert

+0

Хорошо, что я мог бы помочь. Asyncs - очень важная часть C#, я рекомендую прочитать о них - [страница MSDN] (https://msdn.microsoft.com/en-us/library/mt674882.aspx) охватывает основы. –