Cui*_*崔鹏飞 9 navigation silverlight dispose windows-phone-7
例如,如果我有这样的页面:
public partial class Page1 : PhoneApplicationPage
{
DispatcherTimer timer = new DispatcherTimer();
public Page1()
{
InitializeComponent();
timer.Interval = TimeSpan.FromSeconds(5);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
MessageBox.Show("timer tick");
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中,我导航到此页面,它将每5秒弹出一个消息框.然后我按下手机上的"后退"按钮并导航回上一页.但奇怪的是它仍然每5秒弹出一个消息框.我知道我可以在OnNavigatedFrom方法中停止计时器,但为什么会这样呢?按下后退按钮后页面是否处理完毕?
谢谢
当没有任何东西保持清醒时,它将被GC处理掉.即使它是由页面创建的,此DispatcherTimer也会保持清醒状态.我在过去的猜测是DispatcherTimer正在由Dispatcher本身引用,因此无法清理,或者沿着这些行进行清理.
要演示添加finalize方法
#if DEBUG
~MyPage() {
System.Diagnostics.Debug.WriteLine("Killing MyPage");
}
#endif
Run Code Online (Sandbox Code Playgroud)
然后在主页面的某处添加一个按钮以强制执行 GC.Collect()
如果你关闭OnNavigatedFrom页面中的计时器将被清理,如果你没有,它将不会.
我还没有用Mango测试它,看看它是否更智能,但是使用7.0工具我不得不做一些工作来解决这个问题.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |