Frame.GoBack();
我使用此简单方法浏览应用程序:
public async Task NavigateTo(Type kioskPage)
{
try
{
if (Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
{
Frame.Navigate(kioskPage, KioskModel);
}
else
{
await Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
Frame.Navigate(kioskPage, KioskModel);
}));
}
}
catch (Exception ex)
{
//maybe a race condition
Task.Delay(500).Wait();
try
{
await Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
Frame.Navigate(kioskPage, KioskModel);
}));
}
catch (Exception ex2)
{
HandleError(ex2, TrackedEventSources.Code, false, "Double thread exception", true, "NavigateTo");
}
}
}
await NavigateTo(typeof(MainView), aModel);
是否有一种标准的方式,应该在其中浏览回家,以便将背串重置为0?还是我的导航方式我做错了什么? 我可以打电话:
Frame.BackStatck.Clear();
但这并不能释放内存。Edit:我也可以做到这一点,但它不能释放记忆(这可能意味着不是问题的框架):
public void NavigateToHome()
{
if (Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
{
while (Frame.CanGoBack)
{
Frame.GoBack();
}
}
else
{
Task.Run(() => Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
while (Frame.CanGoBack)
{
Frame.GoBack();
}
}));
}
}
I通过将代码从kiokpage移至整个应用程序中使用的单个模型来找到问题。
看起来,我的某些代码在每个页面后面的代码中均未发布,并且随着导航的发生而随着时间的推移而构建。 我没有找到确切的原因。I设置了一个测试应用程序以循环浏览页面,并观看内存的增加,直到600MB左右,应用程序冻结了。移动代码后,此停止了。