我有一个C#/ XAML Windows应用商店应用,我需要能够在简历处理程序中执行一些网络/ RESTful API测试,以确保令牌/会话仍然有效。如果不是,则应用需要将用户引导回登录页面。
我在SO上尝试了许多解决方案,出于某种原因,它们无法在App.xaml.cs中运行。最重要的问题似乎是我无法从简历处理程序中获取Frame.Navigate。
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
Application.Current.Resuming += new EventHandler<object>(OnResuming);
}
private async void OnResuming(object sender, object e)
{
bool success = true;
// some tests are performed here
if (!success) { /* what do I use here? */ }
}
我在以下页面尝试过解决方案:
答案 0 :(得分:1)
在您的示例中,您在Application类中处理Resuming事件而不是其他地方。您甚至可以在应用程序页面中的任何位置附加恢复处理程序。
这个example from MSDN (How to resume an app)直接在MainPage类上绑定了resume处理程序,你可以在访问Frame.Navigate方法时没有问题。您甚至可以创建一个PageBase
类,它会自动添加此简历处理程序,以便您的所有页面都可以利用此功能。
另一个解决方案就是抓住根框架。默认的WinRT示例应用程序使用以下内容:
Frame rootFrame = Window.Current.Content as Frame;
所以你做同样的事情应该很安全。虽然你说你出于某些原因无法访问Frame.Navigate,所以如果你已经尝试过,我就不是用户了。
最重要的是要确保你根本没有阻止UI线程。不会在UI线程上调用Resuming事件,因此默认情况下不会阻止它,但请确保您无论如何都要利用async
/ await
,并使用Dispatcher更新任何UI。