我有一个WP7应用程序,有时需要进行很长的(5-25秒)处理。
使用Mango,当应用程序在处理时设置为休眠状态 (例如:用户按下Windows按钮或锁定屏幕),当用户返回时,应用程序崩溃。
我在模拟器和我的设备上试过了同样的行为。
如果我在Visual Studio上以调试模式重现它,它不会崩溃,所以很难找到真正发生的事情。
要重现它,请启动一个新的Windows Phone项目,在MainPage.xaml&上添加一个按钮。在执行无限循环的click事件上添加一个事件处理程序:
while (true)
{
System.Threading.Thread.Sleep(100);
}
我的问题是:真的发生了什么?为什么会崩溃?不是快速的应用程序切换应该暂停应用程序进程并恢复它吗?
编辑: 我注意到的另一件事是,当运行沉重的过程时,停用的&当我离开/进入应用程序时似乎没有激活事件。
答案 0 :(得分:4)
在官方Windows Phone论坛(link)上找到答案。这是:
为何崩溃:
从停用应用程序开始,它只有十秒钟 完成它正在做的事情。如果代码需要十秒以上, 操作系统将终止该应用程序。
为何停用&当我离开/进入应用程序时,不会激活激活的事件:
如果进程阻止了UI线程,这也会阻止该消息 调度循环所以我怀疑这就是为什么你的应用永远不会 有机会发现并处理事件。
答案 1 :(得分:1)
你的问题很简单。当你在这个快速时间内处于繁重的处理状态时,WP7无法将你的线程置于休眠状态,并且会保存一个损坏的状态。重新激活时,此状态将崩溃。
它在调试器中工作,因为调试器使一切变慢,然后WP7有更多的时间。
来自文档:
当用户远离应用程序向前导航时,在引发Deactivated事件后,操作系统将尝试将应用程序置于休眠状态。在此状态下,所有应用程序的线程都将停止,并且不会进行任何处理,但应用程序在内存中保持不变。如果从此状态重新激活应用程序,则应用程序不需要重新创建任何状态,因为它已被保留。
来源:http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx