Как читать несколько файлов, используя метод getfileasync в UWP - PullRequest
0 голосов
/ 30 августа 2018

Я занимаюсь разработкой приложения UWP, и мне нужно прочитать некоторые файлы Json для использования данных в папке assests.

Тогда я создал этот метод,

public async Task<StorageFile> access(string filename)
    {
        var storageFile = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\data\" + filename);
        return storageFile;
    }

public async Task<string> read(StorageFile storagefile)
    {
        string content = await FileIO.ReadTextAsync(storagefile);
        return content;
    }

Поэтому я использовал этот метод в mainpage, чтобы сначала прочитать файл,

Task<StorageFile> stream1_1 = access("mycourse.json");
Task<string> stream1_2 = read(stream1_1.Result);
string mycourseinfo = stream1_2.Result;

Успешно получается, когда я пытаюсь отобразить его в текстовом блоке

mytextblock.text = mycourseinfo;

Затем я добавил еще один, чтобы прочитать второй файл

Task<StorageFile> stream2_1 = access("class_info.json");
Task<string> stream2_2 = read(stream2_1.Result);
string allclassinfo = stream2_2.Result;

Тогда проблема возникла, приложение не будет также отображать сообщение об ошибке, я предположил, что это была сделка .....

Я попытался прочитать второй файл в одиночку, и он снова успешен! Так как же я могу решить эту проблему !! Мне нужно прочитать три файла!

1 Ответ

0 голосов
/ 30 августа 2018

вам просто нужно добавить await позади ваших методов, потому что они возвращают Tasks . когда я добавляю за ним await, он завершит выполнение этой строки и только после ее завершения перейдет к следующей строке кода, ваш тупик создается, потому что вы не используете await. используйте следующий код для чтения каждого файла.

StorageFile stream1_1 = await access("mycourse.json");
string stream1_2 = read(stream1_1);
string mycourseinfo = stream1_2;

также обратите внимание, что тип возвращаемых данных не должен быть Task при использовании await.

, чтобы избежать создания вашего конструктора async , вы должны использовать событие Loaded .

Итак, в конструктор вашей страницы добавьте следующее загруженное событие, например:

Loaded += async (s, e) =>
{
    //do any awaited stuff here
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...