我正在编写Xamarin应用。在App.Xaml.cs中,我公开了一些事件。 我设置了这样的主页:
var nav = new NavigationPage(new MainPage());
MainPage = nav;
然后从主页推到另一页:
void DevicePictureBox_Click(object sender, EventArgs args)
{
Image imse = (Image)sender;
String NameofDevice =
devicesHandlesDictionary_byDevicepictureID[imse.Id].Name;
var p = new DevicesPage(NameofDevice);
Navigation.PushAsync(p);
DevicesPage订阅一个事件(从App公开)。 沿着代码设置一些Debug.WriteLine,我发现导航回MainPage时,DevicesPage仍处于活动状态(按向后箭头或使用Navigation.PopAsync())。 同样,当我再次导航到DevicesPage时,如果执行两次,代码将执行两次(“输出”窗口中的Degug.WriteLine字符串出现两次)和3、4、5等。似乎每次都会创建一个新页面,而前一个页面仍在后台运行。 我了解应该取消订阅事件(在这种情况下应在此处订阅)。同样令我困惑的是,该代码似乎仍在向后导航的页面中运行。如何删除页面?
答案 0 :(得分:3)
导航回MainPage时,DevicesPage仍处于活动状态
仅仅因为您离开页面并不意味着您已经完成页面。您可能要稍后再使用。您可以根据需要明确清理它的资源(例如,取消订阅OnDisappearing中的事件处理程序),但这不会自动发生
似乎每次都会创建一个新页面
这样做是因为每次您显式创建DevicesPage
的新实例
var p = new DevicesPage(NameofDevice);
Navigation.PushAsync(p);
没有什么可以阻止您保留对DevicesPage
实例的引用并重新使用它,而不是总是创建一个新实例