Есть ли простой способ выполнить метод в потоке пользовательского интерфейса во время асинхронной задачи?

Ключевое слово final не имеет отношения к количеству используемой памяти, поскольку это означает, что вы не можете изменить значение переменной.

Однако, поскольку переменная объявлена ​​static , будет только одна такая переменная, которая принадлежит классу, а не конкретному экземпляру.

Взято из здесь :

Если a поле объявлено static, существует ровно одно воплощение поля, независимо от того, сколько экземпляров (возможно, нулевых) класса может быть в конечном итоге создано. Статическое поле , иногда называемое переменной класса, воплощается при инициализации класса. Поле, которое не объявлено статическим (иногда называемое нестатистическим полем ), называется переменной экземпляра. Всякий раз, когда создается новый экземпляр класса, создается новая переменная, связанная с этим экземпляром для каждой переменной экземпляра, объявленной в этом классе или любом из ее суперклассов.

blockquote>

0
задан generic4449 18 January 2019 в 09:45
поделиться

1 ответ

Существует структура, называемая ReactiveUI - она ​​использует ReactiveExtensions и наблюдаемые, чтобы упростить жизнь MVVM.

У вас нет глубокого погружения и вы используете весь каркас, но у него есть четкая концепция Взаимодействие :

public class ViewModel : ReactiveObject
{
    private readonly Interaction<string, bool> confirm;

    public ViewModel()
    {
        this.confirm = new Interaction<string, bool>();
    }

    public Interaction<string, bool> Confirm => this.confirm;

    public async Task DeleteFileAsync()
    {
        var fileName = ...;

        // this will throw an exception if nothing handles the interaction
        var delete = await this.confirm.Handle(fileName);

        if (delete)
        {
            // delete the file
        }
    }
}

public class View
{
    public View()
    {
        this.WhenActivated(
            d =>
            {
                d(this
                    .ViewModel
                    .Confirm
                    .RegisterHandler(
                        async interaction =>
                        {
                            var deleteIt = await this.DisplayAlert(
                                "Confirm Delete",
                                $"Are you sure you want to delete '{interaction.Input}'?",
                                "YES",
                                "NO");

                            interaction.SetOutput(deleteIt);
                        }));
            });
    }
}

Вы можете просто сосредоточиться на взаимодействиях.

Я бы также рекомендовал ReactiveCommand, чтобы избежать проблем с кнопками и асинхронными действиями.

0
ответ дан Krzysztof Skowronek 18 January 2019 в 09:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: