我正在使用Navigation.PushAsync
导航到新页面,当工作完成后,它会调用PopAsync
返回上一页。问题是第一页需要等待新页面弹出然后继续一些工作。所以我这样做:
// source page:
DoWork();
await Navigation.PushAsync(new TargetPage()); <== this does not wait for the page!??
DoOtherWork();
我观察到DoOtherWork
部分会在显示新页面时立即运行,直到它被解除为止。但是我在这里使用await
,这意味着后面的部分应该是异步任务完成后的延续,对吧?为什么不等待导航任务就会运行?
答案 0 :(得分:3)
await Navigation.PushAsync(new TargetPage());
此代码&#34;等待&#34;直到&#34; TargetPage&#34;可视化,然后代码继续&#34; OnOtherCode&#34;。
如果您想在关闭TargetPage后执行某些代码,则应在Navigation.PopAsync
之后或在&#34; TargetPage的OnDisappearing&#34;中添加此代码。事件
另一个解决方案可以是:在&#34; TargetPage的OnDisappearing&#34;中使用MessagingCenter.Send
。事件并在“呼叫页面”中订阅相同的消息
答案 1 :(得分:0)
你可以这样做:
public async Task<bool> openContentPageForResult()
{
TaskCompletionSource<bool> waitToCloseTask = new TaskCompletionSource<bool>();
MyPage myNewPage = new MyPage();
myNewPage.Disappearing += (sender2, e2) =>
{
waitToCloseTask.SetResult(true);
};
await App.Current.MainPage.Navigation.PushAsync(myNewPage);
return await waitToCloseTask.Task;
}
然后只需调用此方法并等待结果,在本例中为布尔结果。
bool myResult = await openContentPageForResult();