我有一个问题。我有启动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
语句?
如何在Caliburn.Micro中等待ActivateItem
的结束?
编辑:
尝试类似的事情:
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上的issue,我将Caliburn升级到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
关闭时点击它。
答案 0 :(得分:1)
您应该等待ActivateItemAsync
方法。这意味着您的LoadTaskManagerPage()
应该返回一个Task
,而您也应该await
返回一个:
public async Task LoadTaskManagerPageAsynnc()
{
await this.ActivateItemAsync(new TaskManagerViewModel(this.LoggedUser, this.repository));
if (!this.LoggedUser.GetUserTask().IsTaskTakenByUser())
{
//logic
}
}