2012年3月19日 星期一

MessageBox 的行為差異

Windows Phone如何在Screen Locked環境運行 這則文章中…
我提到了 ApplicationIdleDetectionMode 屬性的運用…
但設定這個屬性卻可能讓你的 App 發生 Crash


可以建立一個專案…專案啟動後在 MainPage 初始化完成後做 MessageBox.Show()
在 MessageBox 彈出來後手動將螢幕鎖定…
再打開後應該可以發現 MessageBox 自動觸發 OnCancel 結速掉自己…

這時再此專案加入可以在 Screenlock 時執行的命令後再做一樣的測試動作…
彈出訊息框後關螢幕…再打開螢幕後可以發現 MessageBox 還在…
且若我們完全不理會那個 MessageBox 10 秒之後會發生 Crash 的狀況…

查了文件後發現 Windows Phone 上本來就有 10 秒鐘 ANR 的限制…
但若一般情況在 UI Thread 中啟動 MessageBox 應該不在這個限制內…
上述情況應該是個 bug 且我目前不知道有什麼方法可以解決…

寫個筆記僅提醒…未來若是有可能出現這種流程…
記得考慮一下是否將屬性設為 IdleDetectionMode.Disabled
若你的程式全是和畫面相關的流程…非必要就不用特別設了…以免發生 ANR 的狀況…

沒有留言:

張貼留言