wp7: приложение не работает!Не можете понять где? - PullRequest
2 голосов
/ 03 апреля 2011

Я думаю, что сузил его до этого кода в событии Деактивация:

Вот в чем дело ... Когда я ставлю точку останова в этом коде, все работает отлично. Приложение НЕ терпит неудачу. Однако, когда я снимаю точку останова, она терпит неудачу. Чего я не понимаю, так это того, почему try / catch не стреляет.

Я должен также отметить, что я прокомментировал все из этого события без точки останова, и приложение работало нормально. Так что-то в этом коде ...

Может ли быть, что событие сохранения не завершено для несохраненного объекта, и когда оно пытается повторно активировать событие активации, происходит сбой ??? private void Application_Deactivated(object sender, DeactivatedEventArgs e) { //MessageBox.Show("deactivated"); try { //if ((Application.Current as App).infoSaved == false) //{ unsaved unSavedPillInfo = new unsaved(); unSavedPillInfo.RXName = (Application.Current as App).appRXName; unSavedPillInfo.RXNumber = (Application.Current as App).appRXNumber; unSavedPillInfo.DosageNotes = (Application.Current as App).appDosageNotes; unSavedPillInfo.Generic = (Application.Current as App).appGeneric; unSavedPillInfo.Instructions = (Application.Current as App).appInstructions; unSavedPillInfo.Reason = (Application.Current as App).appReason; unSavedPillInfo.Quantity = (Application.Current as App).appQuantity; unSavedPillInfo.Refills = (Application.Current as App).appRefills; unSavedPillInfo.Doctor = (Application.Current as App).appDoctor; unSavedPillInfo.DoctorNumber = (Application.Current as App).appDoctorNumber; unSavedPillInfo.Pharmacy = (Application.Current as App).appPharmacy; unSavedPillInfo.PharmacyNumber = (Application.Current as App).appPharmacyNumber; unSavedPillInfo.OrigDate = (Application.Current as App).appOrigDate; unSavedPillInfo.ReorderReminder = (Application.Current as App).appReorderReminder; unSavedPillInfo.ReorderDate = (Application.Current as App).appReorderDate; unSavedPillInfo.ConsumptionFrequency = (Application.Current as App).appConsumptionFrequency; unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).perscriptionUpdated; unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).doctorUpdated; unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).detailsUpdated; unSavedPillInfo.PerscriptionUpdated = (Application.Current as App).pharmacyUpdated; unSavedPillInfo.Save(); //} } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Это вряд ли идеально, но попробуйте поместить Messagebox внутри каждого из обработчиков событий. Таким образом, вы можете определить, когда каждый стреляет, и посмотреть, не стреляет ли он.

Также вам может понадобиться часто удалять приложение, чтобы очистить IsolatedStorage. Известно, что это создает проблемы, если вы продолжаете работать в той же установке.

РЕДАКТИРОВАТЬ: Да, из того, что я столкнулся, приложение может зависнуть, если вы не сохраняете должным образом в изолированном хранилище. Это также может произойти, если вы неправильно загружаете данные из изолированного хранилища. Возможно, вы захотите попробовать каждый по отдельности. Используйте окно сообщения, чтобы убедиться, что оно сохраняется и загружается правильно, поскольку VisualStudio выйдет из текущего сеанса отладки.

ОБНОВЛЕНИЕ Вам нужно создать глобальную переменную unsavedPrescription. Теперь, когда пользователь выбирает рецепт, назначают глобальную переменную «несохраненный» рецепт, который он выбрал. Примечание. Не следует назначать свойства при деактивации приложения, поскольку вполне возможно, что оно не будет полностью сохранено, что приведет к зависанию приложения. Вместо этого все, что вам нужно сделать, это присвоить выбранный рецепт глобальной переменной и изменить код в App.xaml.cs следующим образом:

public unsaved unsavedPrescription {get; set;}

private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
    //Open up IsolatedStorageSettings
    IsolatedStorageSettings settings = Isolated StorageSettings.ApplicationSettings;

    //Use a model to save prescription
        //So create a name/value pair to store the prescription in isolatedstorage
    //Notice we used the global variable
    settings["UnsavedPrescription"] = unsavedPrescription;
}

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    //Now you can easily load the prescription you saved
    //I'm reassigning the global variable that will contain the savedprescription

    if(settings.TryGetValue("UnsavedPrescription", out prescription)
    {
        unsavedPrescription = prescription;
    }
}

Это значительно упрощает ваш код при загрузке и сохранении. Также вы сможете протестировать, используя ящики сообщений, как я уже говорил ранее, это не профессионально, но работает хорошо. Кроме того, вы не используете слишком много материала, когда приложение пытается деактивировать. ЭТОТ ПУТЬ РАБОТАЕТ, КАК Я ИСПЫТАЛ. То, как вы это сделали выше, похоже на то, что вы выполняете много кода, когда приложение деактивируется, поэтому, вероятно, оно зависает. Также это объясняет, почему при удалении все работает.

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

У меня была проблема, похожая на вашу, которая на самом деле не была связана с сохранением / загрузкой из самого IsolatedStorage, а скорее с тем свойством, которое я устанавливал / получал, имело бесконечную рекурсию. Это привело к прекращению работы приложения до получения операторов Catch.

Возможно, вам стоит отключить отладчик, перейдя в свойства: Сервис -> Параметры -> Отладчик -> Переступить через свойства и операторы (только управляемые)

public Dictionary<string, object> Dictionary
        {
            get
            {
                if (_dictionary == null)
                    _dictionary = new Dictionary<string, object>();
                return _dictionary;
            }
            set
            {
                Dictionary = value;
            }
        }

Приложение Никогда не запускается успешно после Tombstoning. Не исключено исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...