Действие после ActivateItem в Caliburn.Micro - PullRequest
0 голосов
/ 26 мая 2019

У меня есть вопрос.У меня есть кнопка, с которой я запускаю ActivateItem:

    public void LoadTaskManagerPage()
    {
        this.ActivateItem(new TaskManagerViewModel(this.LoggedUser, this.repository));

        if (this.LoggedUser.GetUserTask() != null)
        {
            this.IsActiveTaskButtonVisible = Visibility.Visible;
            this.NotifyOfPropertyChange(() => this.IsActiveTaskButtonVisible);
        }
    }

Возможно ли hang приложение и перейти только к if заявлению, если ActivateItem заканчивается?

Какждать окончания ActivateItem в Caliburn.Micro?

РЕДАКТИРОВАТЬ:

Попытка что-то вроде:

    public void LoadTaskManagerPage()
    {
        var taskManagerTask = Task.Run(() => this.ActivateItem(new TaskManagerViewModel(this.LoggedUser, this.repository)));
        taskManagerTask.Wait();

        if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
        {
            this.IsActiveTaskButtonVisible = Visibility.Visible;
            this.NotifyOfPropertyChange(() => this.IsActiveTaskButtonVisible);
        }
    }

С задачами, нокогда я нажимаю LoadTaskManagerPage(), окно не отображается, приложение зависает навсегда

EDIT2

На основе моей проблемы на github, я обновилКалибровка на alpha 4.0:

public void LoadTaskManagerPage()
    {
        this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));

        if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
        {
            //logic
        }
    }

я изменила ActiveItem() на ActiveItemAsync(), но все же, она достигла оператора if до закрытия активного элемента.используя async/await сделать то же самое

EDIT3

Когда я делаю async/await, он все равно работает, посмотрите на мой вид справа.Его нажали, User Control не появляются.В то же время (даже когда мой User Control не появляется) я слишком рано нажимаю на if.Я хочу нажать на User Control close.

enter image description here

1 Ответ

1 голос
/ 27 мая 2019

Вам следует дождаться ActivateItemAsync метода.Это означает, что ваш LoadTaskManagerPage() должен вернуть Task, и вам также следует await:

public async Task LoadTaskManagerPageAsynnc()
{
    await this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));

    if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
    {
        //logic
    }
}
...