在简历处理程序中的 App.xaml.cs 中进行导航
Posted
技术标签:
【中文标题】在简历处理程序中的 App.xaml.cs 中进行导航【英文标题】:Doing navigation in App.xaml.cs within resume handler 【发布时间】:2013-12-13 05:13:34 【问题描述】:我有一个 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? */
我在以下页面上尝试了解决方案:
Run code on UI thread in WinRT http://social.msdn.microsoft.com/Forums/windowsapps/en-US/6228490a-0fd8-46ce-adc6-b8d161eeec68/update-ui-when-using-threadpool?forum=winappswithcsharp Request UI navigation using PRISM 4 on an asynchronous WCF response thread WPF/C# Don't block the UI【问题讨论】:
【参考方案1】:在您的示例中,您从 Application 类而不是其他地方处理 Resuming 事件。即使在应用程序页面中,您也可以在任何位置附加恢复处理程序。
这个example from MSDN (How to resume an app) 将恢复处理程序直接绑定在 MainPage 类上,在该类中访问 Frame.Navigate 方法应该没有问题。您甚至可以创建一个 PageBase
类来自动添加此简历处理程序,以便您的所有页面都可以利用此功能。
另一种解决方案是只抓取根框架。默认 WinRT 示例应用使用以下内容:
Frame rootFrame = Window.Current.Content as Frame;
所以你应该很安全地做同样的事情。尽管您说由于某种原因您无法访问 Frame.Navigate,但如果您已经尝试过,我不是用户。
主要是确保您根本没有阻塞 UI 线程。在 UI 线程上不会调用 Resuming 事件,因此默认情况下它不会阻止它,但请确保您利用 async
/await
,并使用 Dispatcher 更新任何 UI。
【讨论】:
谢谢本。有趣的是,在 WP8 中,所有这些在 App.xaml.cs 中都非常有效,但在 Win8 中则不然。我将处理程序和支持方法移到页面 .xaml.cs 文件中并移出 App.xaml.cs。我确实能够从那里附加到 this.Frame 。任何线索如何真正让它暂停?我试过用 ALT-TAB 离开应用程序然后回来。似乎没有触发事件。 找到这个(用于强制暂停/恢复):***.com/questions/17857660/…以上是关于在简历处理程序中的 App.xaml.cs 中进行导航的主要内容,如果未能解决你的问题,请参考以下文章
WPF App.xaml.cs常用模板,包括:异常捕获,App只能启动一次