在后台线程中获取当前显示的页面

时间:2014-06-05 10:52:06

标签: c# windows-phone-8

我有一个后台线程通过计时器事件定期运行。我知道如何向UI线程调用一些东西:

Deployment.Current.Dispatcher.BeginInvoke( () => { 
    // doing stuff here...
    f_Foo("hello world");
});

如何在后台主题中解析,当前是否向用户显示了哪个页面?我在f_Foo中需要一些原因,就像这里的当前页面一样:

f_Foo(this, "hello world");

但是this不起作用。这是我对f_Foo的声明:

public static void f_Foo(PhoneApplicationPage pPage, string pMessage) { ... }

2 个答案:

答案 0 :(得分:3)

这是一个返回当前显示的页面的方法:

public static Page GetCurrentPage() {
    Page page;
    if (Application.Current.RootVisual is Page) {
        page = (Page)Application.Current.RootVisual;
    } else if (Application.Current.RootVisual is Frame) {
        var frame = (Frame)Application.Current.RootVisual;
        page = (Page)frame.Content;
    } else {
        page = null;
    }
    return page;
}

只需更改代码或将结果转换为PhoneApplicationPage即可。哦,你只能从UI线程中调用它,但这不应该是你的情况下的问题(或者我见过的任何其他问题)。

答案 1 :(得分:1)

为了达到这个目的,如果您使用NavigationService.CurrentSource,它将返回您在给定时间向用户显示的页面的当前Uri。

如果需要访问页面实例,请声明PhoneApplicationPage类型的静态全局变量(例如在App.xaml.cs文件中)

    public static PhoneApplicationPage CurrentPage;

然后,在页面的每个OnNavigatedTo方法上,将当前页面分配给该变量。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Application.Current.CurrentPage = this;
        base.OnNavigatedTo(e);
    }

然后在您的方法中,您可以致电:

    f_Foo(Application.Current.CurrentPage, "hello world");