NullReferenceException в приложении Silverlight на Windows Phone 7 - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть приложение Silverlight для Windows Phone 7. Это приложение работает нормально, кроме случаев, когда пользователь захороняет приложение и пытается его повторно активировать. Когда они пытаются реагировать на приложение, я получаю исключение NullReferenceException, когда я захлопываю приложение на одной конкретной странице. Моя проблема в том, что я не могу на всю жизнь определить истинную причину этого исключения.

Кто-нибудь знает какие-нибудь хорошие бесплатные инструменты, которые помогли бы мне изучить потенциальную причину? Или у кого-нибудь есть способ определить причину. Трассировка стека не помогает, как это выглядит, но не определяет, где проблема в моем коде:

   at System.Runtime.Serialization.XmlFormatReader.StoreCollectionValue(Object& collection, Object value, CollectionDataContract collectionContract)
   at System.Runtime.Serialization.XmlFormatReader.LoadValueOfCollection(DeserializedObject desObj, Object value, Int32 membersRead, Type itemType)
   at System.Runtime.Serialization.XmlFormatReader.ReadGetOnlyCollectionItem(DeserializedObject desObj, CollectionDataContract collectionContract, Int32 membersRead)
   at System.Runtime.Serialization.XmlFormatReader.ReadGetOnlyCollection(DeserializedObject desObj, CollectionDataContract collectionContract, Int32 membersRead)
   at System.Runtime.Serialization.XmlFormatReader.Deserialize(XmlObjectSerializerReadContext context)
   at System.Runtime.Serialization.XmlFormatReader.InitializeCallStack(DataContract clContract, XmlReaderDelegator xmlReaderDelegator, XmlObjectSerializerReadContext xmlObjContext, XmlDictionaryString[] memberNamesColl, XmlDictionaryString[] memberNamespacesColl)
   at System.Runtime.Serialization.CollectionDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
   at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader)
   at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, DataContract& dataContract)
   at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns)
   at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(Stream stream)
   at Microsoft.Phone.Shell.StreamPersister.Deserialize(Byte[] blob, IEnumerable`1 knownTypes, IDictionary`2& dictionary)
   at Microsoft.Phone.Shell.StreamPersister.Load(ShellPageManager shellPageManager, String key, IEnumerable`1 knownTypes, IDictionary`2& dictionary)
   at Microsoft.Phone.Shell.PhoneApplicationService.FireActivated()
   at Microsoft.Phone.Execution.NativeEmInterop.FireOnResume()

Это похоже на проблему с сериализацией. Тем не менее, я не знаю, что может вызвать проблемы. Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 апреля 2011

Если вы подозреваете проблему сериализации, вы можете легко проверить содержимое загруженных данных, например,

using (var fs = isoStore.OpenFile(StoragePath, System.IO.FileMode.Open))
{
    StreamReader sr = new StreamReader(fs);
    string content = sr.ReadToEnd();
    // Put a break point here and show content variable in Xml Visualizer.
    // Can be done from Locals Debug window for example.
}

Но я бы начал с проверки логики вашего приложения.Скорее всего, то, что еще не было инициализировано.Должно быть легко найти в отладчике.

0 голосов
/ 21 апреля 2011

У меня была такая же проблема этим утром. Моя проблема была связана с использованием базового массива. Я изменил массив на ObservableCollection, и он работал. Я подробно описал проблему с кодом в этом блоге .

0 голосов
/ 20 апреля 2011

Попробуйте выполнить отладку с точкой останова в обработчике события Application_Activation.При повторной активации приложения что-то может быть нулевым:

private void Application_Activated(object sender, ActivatedEventArgs e)
{
   //insert a breakpoint here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...