Я устанавливаю содержимое RichEditBox с помощью операции чтения файла следующим образом:

Editor.Document.SetText(Windows.UI.Text.TextSetOptions.None, await FileIO.ReadTextAsync(file));

Но я хочу запустить еще несколько команд, только если и когда операция асинхронного чтения будет завершена. Судя по документация, нечто подобное возможно в WinJS с помощью команды .done(). Но я использую C # и XAML, поэтому мне нужно найти другой способ.

Я предполагаю, что это можно сделать с помощью AsyncStatus.

Я пробовал настроить следующий код, но не знаю, чем заменить ?????? с участием:

AsyncStatus status = ??????;
if (status == AsyncStatus.Completed)
{
    // Do something.
}
else
{
    // An error occurred.
}

Есть ли способ заставить это работать? Есть ли другой (лучший?) Способ сделать это?

0
user3651656 21 Май 2014 в 06:55

2 ответа

Лучший ответ

Я не знаком с приложениями Магазина Windows, поэтому, возможно, мне что-то не хватает, но поскольку вы ожидаете вызова FileIO.ReadTextAsync, ваш метод будет блокироваться до тех пор, пока вызов SetText не будет завершен, поэтому вы можете просто написать код остальные команды после этого:

Editor.Document.SetText(Windows.UI.Text.TextSetOptions.None, await FileIO.ReadTextAsync(file));
// Do other stuff - ReadTextAsync will have finished by now.
1
Mark 21 Май 2014 в 05:14

@Mark прав, метод вернется, как только он запустит метод ReadTextAsync, и после его завершения, если ошибки нет, вызов SetText продолжится. В противном случае будет выброшено исключение. Вы можете поймать это, если вам нужно зарегистрировать ошибку и т. Д.

public async void SetText(string file)
{
    try
    {           
        var text = await FileIO.ReadTextAsync(file);

        //ReadTextAsync succeeded, set text 
        Editor.Document.SetText(Windows.UI.Text.TextSetOptions.None, text);
    }
    catch (Exception ex)
    {
        // error do something
        throw;
    }
}
0
NeddySpaghetti 21 Май 2014 в 11:08