UWP应用程序导航到家并清除框架

问题描述 投票:0回答:0
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);

this这是在主线程还是背景上的工作。
是否有一种标准的方式,应该在其中浏览回家,以便将背串重置为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左右,应用程序冻结了。移动代码后,此停止了。

c# uwp memory-leaks
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.