2011-08-15 37 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不能將線程置於休眠狀態? –