C# Windows Phone App 開發,解決使用PhoneApplicationService在頁面間傳遞參數時按下【Home】、【Bing Search】鍵時的例外狀況。

一般我們在開發Windows Phone App時,很常會在頁面與頁面間傳遞參數,方便製作動態的頁面,可以避免根據不同資料需要製作一次頁面的窘境,但是若我們在頁面間傳遞參數時是利用PhoneApplicationService的方式,將很有可能在使用者按下【Home】和【Bing Search】鍵時發生Crash。

本篇文章將引導您解決使用PhoneApplicationService在頁面間傳遞參數時按下【Home】、【Bing Search】鍵時的例外狀況。

一般我們在開發Windows Phone App時,很常會在頁面與頁面間傳遞參數,方便製作動態的頁面,可以避免根據不同資料需要製作一次頁面的窘境,但是若我們在頁面間傳遞參數時是利用PhoneApplicationService的方式,將很有可能在使用者按下【Home】和【Bing Search】鍵時發生Crash。

 

本篇文章將引導您解決使用PhoneApplicationService在頁面間傳遞參數時按下【Home】、【Bing Search】鍵時的例外狀況。

 

首先傳遞參數請參閱 :

Windows Phone 8 C# 換頁傳遞參數 兩種方法 Navigation 、PhoneApplicationService

 

若我們使用PageA傳遞參數(通常是Object)給PageB時

在PageB頁面按下【Home】、【Bing Search】鍵時 就會發生以下錯誤

 

cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. Alternatively, you can ensure that the type is public and has a parameterless constructor - all public members of the type will then be serialized, and no attributes will be required.

 

根據SUKI推斷會發生例外狀況的原因是因為在按下【Home】、【Bing Search】鍵時,

APP會自動將存在PhoneApplicationService內的自定義參數(也就是PageA傳遞到PageB的參數)序列化,以供下次返回APP時在反序列化,

將資料還原,以達成看起來APP還正在運作畫面,但是就當跳出APP時,您的自定義參數(Object)內的Method是沒有辦法被序列化的,

所以這時就發生了例外狀況,導致APP終止,開發者很難察覺到這部分的錯誤,所以要多加注意,以免上架被打槍。

 

將物件序列化請參閱:

[Windwos Phone]使用序列化(Serialize)做IsolatedStorage檔案儲存與讀取-使用資料合約(DataContract)Json格式

 

第一種解決方法就是按照上篇參考文章將您的自定義參數序列化,第二種方法就是將您的參數存放到PageB頁面中,

並且從PhoneApplicationService中的自定義參數刪除

 

   1:  if (PhoneApplicationService.Current.State.ContainsKey("您參數存放的Key"))
   2:  {
   3:      //如果已經存在則刪除
   4:      PhoneApplicationService.Current.State.Remove("您參數存放的Key");
   5:  }

 

如此一來就可以正常的運行APP了!!

 

References : SUKI 本人自己悟出來的…

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 !  感謝。

SUKI

HOLIESTAR