2011-08-15 38 views
1

我有一个WP7应用程序,有时需要长时间(5-25秒)处理。芒果快速应用切换和重处理崩溃

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

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

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

要重现它,开始一个新的Windows Phone项目,加上MainPage.xaml中&一个按钮上执行一个无限循环的单击事件添加事件处理程序:

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

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

编辑: 我注意到的另一件事是,当运行沉重的过程中,当我离开/在应用程序中时,激活的事件似乎不会被激活。

回答

4

找到官方的Windows Phone论坛(link)的答案。那就是:

为什么它崩溃:

从应用程序被关闭的时候,它正好有十秒钟 完成了它在做什么。如果代码需要十秒以上,则操作系统将终止该应用程序。

为什么当我走出/在应用中停用&激活事件不会引发:

如果进程正在阻塞UI线程,这也阻止消息 调度循环,所以我怀疑这就是为什么你的应用永远不会有 有机会检测和处理事件的原因。

1

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

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

从技术文档:

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

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

+0

你从哪里看到WP7不能将线程置于休眠状态? –