芒果快速app切换&重型加工事故

时间:2011-08-15 09:05:19

标签: c# .net windows-phone-7 windows-phone-7.1

我有一个WP7应用程序,有时需要进行很长的(5-25秒)处理。

使用Mango,当应用程序在处理时设置为休眠状态 (例如:用户按下Windows按钮或锁定屏幕),当用户返回时,应用程序崩溃。

我在模拟器和我的设备上试过了同样的行为。

如果我在Visual Studio上以调试模式重现它,它不会崩溃,所以很难找到真正发生的事情。

要重现它,请启动一个新的Windows Phone项目,在MainPage.xaml&上添加一个按钮。在执行无限循环的click事件上添加一个事件处理程序:

while (true)
{
    System.Threading.Thread.Sleep(100);
}

我的问题是:真的发生了什么?为什么会崩溃?不是快速的应用程序切换应该暂​​停应用程序进程并恢复它吗?

编辑: 我注意到的另一件事是,当运行沉重的过程时,停用的&当我离开/进入应用程序时似乎没有激活事件。

2 个答案:

答案 0 :(得分:4)

在官方Windows Phone论坛(link)上找到答案。这是:

为何崩溃:

  

从停用应用程序开始,它只有十秒钟   完成它正在做的事情。如果代码需要十秒以上,   操作系统将终止该应用程序。

为何停用&当我离开/进入应用程序时,不会激活激活的事件:

  

如果进程阻止了UI线程,这也会阻止该消息   调度循环所以我怀疑这就是为什么你的应用永远不会   有机会发现并处理事件。

答案 1 :(得分:1)

你的问题很简单。当你在这个快速时间内处于繁重的处理状态时,WP7无法将你的线程置于休眠状态,并且会保存一个损坏的状态。重新激活时,此状态将崩溃。

它在调试器中工作,因为调试器使一切变慢,然后WP7有更多的时间。

来自文档:

当用户远离应用程序向前导航时,在引发Deactivated事件后,操作系统将尝试将应用程序置于休眠状态。在此状态下,所有应用程序的线程都将停止,并且不会进行任何处理,但应用程序在内存中保持不变。如果从此状态重新激活应用程序,则应用程序不需要重新创建任何状态,因为它已被保留。

来源:http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx