我有一个后台线程通过计时器事件定期运行。我知道如何向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) { ... }
答案 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");