private async Task RealUnloadingItem(PivotItemEventArgs e)
{
using (_suspendableWorkQueue.HighValueOperationToken)
{
if (e.Item == null)
return;
if (e.Item.DataContext is ViewModelBase)
_viewModelContextService.PopViewModelContext(e.Item.DataContext as ViewModelBase);
//if we didnt finish loading we dont need to make a new writable bitmap
if (!(e.Item.Content is Image) && e.Item.Content is UIElement)
{
if (e.Item.Content is RedditView)
{
await Task.Delay(500);
if (inflightLoad == e.Item)
return;
((RedditView)e.Item.Content).UnloadWithScroll();
}
await Task.Delay(500);
if (inflightLoad == e.Item)
return;
try
{
WriteableBitmap bitmap = new WriteableBitmap(e.Item.Content as UIElement, null);
bitmap.Invalidate();
await Task.Delay(250);
if (inflightLoad == e.Item)
return;
e.Item.Content = new Image { Source = bitmap };
}
catch
{
//sometimes we get a catestrophic error depending on how things were loaded and unloaded here
e.Item.Content = null;
}
}
}
}