in SamplesCommon/SamplesCommon/CompositionImage.cs [371:444]
private async void LoadSurface()
{
// If we're clearing out the content, return
if (_uri == null)
{
ReleaseSurface();
return;
}
try
{
// Start a timer to enable the placeholder image if requested
if (_surface == null && _placeholderDelay >= TimeSpan.Zero)
{
_timer = new DispatcherTimer();
_timer.Interval = _placeholderDelay;
_timer.Tick += Timer_Tick;
_timer.Start();
}
// Load the image asynchronously
ManagedSurface surface = await ImageLoader.Instance.LoadFromUriAsync(_uri, Size.Empty, _loadEffectDelegate);
if (_surface != null)
{
ReleaseSurface();
}
_surface = surface;
// The surface has changed, so we need to re-measure with the new surface dimensions
InvalidateMeasure();
// Async operations may take a while. If we've unloaded, return now.
if (_unloaded)
{
ReleaseSurface();
return;
}
// Update the brush
UpdateBrush();
// Success, fire the Opened event
if (ImageOpened != null)
{
ImageOpened(this, null);
}
//
// If we created the loading placeholder, now that the image has loaded
// cross-fade it out.
//
if (_sprite != null && _sprite.Children.Count > 0)
{
Debug.Assert(_timer == null);
StartCrossFade();
}
else if (_timer != null)
{
// We didn't end up loading the placeholder, so just stop the timer
_timer.Stop();
_timer = null;
}
}
catch (FileNotFoundException)
{
if (ImageFailed != null)
{
ImageFailed(this, null);
}
}
}