在简历处理程序中的 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只能启动一次

UWP 应用中的Back button(TitleBar) 的处理

UWP 中的全局异常处理

UWP 中的全局异常处理

App.xaml介绍

在 WPF 的子线程中捕获未处理的异常