1

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

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

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

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

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

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

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

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

4

2 回答 2

4

在官方 Windows Phone 论坛(链接)上找到了答案。这里是:

为什么会崩溃:

从应用程序被停用的那一刻起,它正好有十秒钟的时间来完成它正在做的事情。如果代码耗时超过十秒,操作系统将终止应用程序。

为什么当我退出/进入应用程序时未引发停用和激活事件:

如果进程阻塞了 UI 线程,这也会阻塞消息分发循环,所以我怀疑这就是为什么您的应用程序永远没有机会检测和处理事件的原因。

于 2011-08-17T20:38:18.087 回答
1

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

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

从文档:

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

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

于 2011-08-15T09:26:35.277 回答