В моем приложении я разрешаю пользователю выходить на рынок по разным причинам. При загрузке торговой площадки, если пользователь нажимает кнопку «Назад» очень быстро, он пытается вернуться к сохраненным заявленным приложениям. Все мои данные из iso-storage и т. Д. Загружаются просто отлично, но экран завис. У меня есть разные панели приложений для различных сводных элементов, и когда я выполняю движение смахиванием, я вижу, что панель приложения меняется, поэтому я знаю, что приложение отзывчиво.
Основная проблема в том, что экран застрял там, где пользователь изначально запустил задачу Marketplace. Я понимаю, что в этом крайнем случае мои конструкторы App и Page не запускаются, а инициируемые события находятся при переходе из приложения, деактивации приложения, активации приложения и при переходе к.
Я подумал, что мог бы использовать логическое значение, чтобы в основном охватить случай, когда запускается рыночная задача, чтобы я мог перезагрузить контекст данных во включенном методе и установить его в свою модель представления. Однако экран все еще заморожен.
Любая помощь по этому вопросу с благодарностью,
Спасибо
Редактировать: вот соответствующий код
private void Application_Activated(object sender, ActivatedEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
DetermineIsTrial();
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
if (playerController.chapterPlayer != null)
{
var store = new PersistentDataStorage();
store.Backup(StringResource.ChapterPosition, playerController.chapterPlayer.Position);
store.Backup(StringResource.ChapterUriString, playerController.chapterPlayer.Source.OriginalString);
store.Backup(StringResource.NaturalDuration, playerController.chapterPlayer.NaturalDuration.TimeSpan);
}
}
Главная страница XAML:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
App.viewIdentifier = StringResource.MainPageView;
if (App.firstTimeLoading == false && PivotBackground.SelectedItem != SuggestedPivotItem)
{
BuildApplicationBar();
}
else if (PivotBackground.SelectedItem == SuggestedPivotItem)
{
BuildMarketPlaceApplicationBar();
}
if (App.firstTimeLoading == true)
{
BuildApplicationBar(); //builds the application bar
//Restore the state from tombstone and set the audioplayer.
App.playerController = new PlayerButtonsController();
App.playerController.SetMediaPlayer(App.MainAudioPlayer);
RestoreState();
ResourceDictionary appResourceList = App.Current.Resources;
App.firstTimeLoading = false;
//default source for chapter position
App.AudioMgr.SetChapterSource(0);
}
}
Дополнительные методы:
private void RestoreState()
{
var store = new PersistentDataStorage();
playerWasWhere = store.Restore<TimeSpan>(StringResource.ChapterPosition);
naturalDuration = store.Restore<TimeSpan>(StringResource.NaturalDuration);
currentAudioFile = store.Restore<String>(StringResource.ChapterUriString);
SetAudioListScrollPosition();
App.playerController.SetPositionFromIsoStorage(currentAudioFile, playerWasWhere, naturalDuration);
}
public void LoadData()
{
CreateAudioPlayerGUIfromChapterList();
CreateAboutMenuGUIfromExtrasData();
CreateQuotesMenuGUIfromExtrasData();
this.IsDataLoaded = true;
}
private void CreateAudioPlayerGUIfromChapterList()
{
int numberOfChapters = 0;
for (int i = 0; i < App.AudioMgr.Parts.Count; i++)
{
ObservableCollection<ItemViewModel> tempObservableCollection = new ObservableCollection<ItemViewModel>();
for (int j = 0; j < App.AudioMgr.Parts[i].NumberOfChapters; j++)
{
tempObservableCollection.Add(new ItemViewModel()
{
LineOne = ProcessTitle(App.AudioMgr.Chapters[numberOfChapters + j].Title),
LineTwo = App.AudioMgr.Chapters[numberOfChapters + j].StatusMessage,
ItemAlpha = 0.0,
ChapterForeground = ChapterInfo.StatusColor[(int)App.AudioMgr.Chapters[numberOfChapters + j].Status],
Progress = 0,
Width = 0,
UserColorTheme = App.accentBrush,
PlayIconVisible = Visibility.Collapsed,
ChapterDurationProgressBarAdjacent = StringResource.Space,
ContainingPart = i,
MediaStateImageSource = StringResource.KJIcons + App.themeDir + StringResource.AppBarSpeaker
});
}
numberOfChapters += App.AudioMgr.Parts[i].NumberOfChapters;
//no parts header doesn't need spacing or border since its the first header.
if (i == 0 && App.AudioMgr.Parts[i].Title == "")
{
Parts.Add(new PartsViewModel()
{
PartsHeader = StringResource.Space,
ChapterForeground = App.defaultForeground,
ChaptersInPart = tempObservableCollection,
PartsBackgroundBrush = App.partsBackgroundBrush,
PartsHeaderHeight = 0,
PartsBorderThickness = new Thickness(0)
});
}
//parts header needs spacing and border
else if (App.AudioMgr.Parts[i].Title != "")
{
Parts.Add(new PartsViewModel()
{
PartsHeader = App.AudioMgr.Parts[i].Title,
ChapterForeground = App.defaultForeground,
ChaptersInPart = tempObservableCollection,
PartsBackgroundBrush = App.partsBackgroundBrush,
PartsHeaderHeight = double.NaN,
PartsBorderThickness = new Thickness(0,0,0,2)
});
}
else
{
Parts.Add(new PartsViewModel()
{
PartsHeader = StringResource.Space,
ChapterForeground = App.defaultForeground,
ChaptersInPart = tempObservableCollection,
PartsBackgroundBrush = App.partsBackgroundBrush,
PartsHeaderHeight = 0,
PartsBorderThickness = new Thickness(0)
});
}
}
}
private void CreateAboutMenuGUIfromExtrasData()
{
int list_count = 0;
for (int i = 0; i < 3; ++i)
{
switch (i)
{
//Evaluate number of Authors
case 0:
list_count = DictionaryIterator(App.Parser.AboutAuthorsArrayList);
if (list_count == 1)
{
this.About.Add(new ItemViewModel() { LineOne = StringResource.AboutAuthor }); //for one author
}
else if (list_count > 1)
{
this.About.Add(new ItemViewModel() { LineOne = StringResource.AboutAuthors }); //for more than one author
}
break;
//Evaluate number of books (should only be one)
case 1:
list_count = DictionaryIterator(App.Parser.AboutBookArrayList);
if (list_count > 0)
this.About.Add(new ItemViewModel() { LineOne = StringResource.AboutBook });
break;
//Evaluate number of Readers
case 2:
list_count = DictionaryIterator(App.Parser.AboutNarratorsArrayList);
if (list_count == 1)
{
this.About.Add(new ItemViewModel() { LineOne = StringResource.AboutReader }); //for one reader
}
else if (list_count > 1)
{
this.About.Add(new ItemViewModel() { LineOne = StringResource.AboutReaders}); //for more than one reader
}
break;
}
}
}
private void CreateQuotesMenuGUIfromExtrasData()
{
int list_count = 0;
for( int i = 0; i < 6; ++i )
{
switch( i )
{
case 0:
list_count = DictionaryIterator(App.Parser.QuotesAuthorAboutArrayList);
if (list_count == 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesAboutAuthor});
else if(list_count > 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesAboutAuthors });
break;
case 1:
list_count = DictionaryIterator(App.Parser.QuotesAuthorFromArrayList);
if (list_count == 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesFromAuthor });
else if (list_count > 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesFromAuthors});
break;
case 2:
list_count = DictionaryIterator(App.Parser.QuotesBookAboutArrayList);
if (list_count > 0)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesAboutBook });
break;
case 3:
list_count = DictionaryIterator(App.Parser.QuotesBookFromArrayList);
if (list_count > 0)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesFromBook });
break;
case 4:
list_count = DictionaryIterator(App.Parser.QuotesReaderAboutArrayList);
if (list_count == 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesAboutReader });
else if (list_count > 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesAboutReaders });
break;
case 5:
list_count = DictionaryIterator(App.Parser.QuotesReaderFromArrayList);
if (list_count == 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesFromReader });
else if (list_count > 1)
this.Quotes.Add(new ItemViewModel() { LineOne = StringResource.QuotesFromReaders });
break;
}
}
}