internal void EnqueueImageDownload(ReportViewItem viewItem)
{
Debug.WriteLine(string.Format("Enqueuing download for '{0}'...", viewItem.NativeId));
// create a new task...
Task<Task<string>>.Factory.StartNew(async () =>
{
Debug.WriteLine(string.Format("Requesting image for '{0}'...", viewItem.NativeId));
// load...
var proxy = ServiceProxyFactory.Current.GetHandler<IGetReportImageServiceProxy>();
var result = await proxy.GetReportImageAsync(viewItem.NativeId);
// check...
result.AssertNoErrors();
// create the new file...
var filename = GetCacheFilename(viewItem);
var cacheFolder = await this.GetCacheFolderAsync();
var cacheFile = await cacheFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
using (var stream = await cacheFile.OpenStreamForWriteAsync())
stream.Write(result.ImageBytes, 0, result.ImageBytes.Length);
// get the URL...
string url = this.CalculateLocalImageUrl(viewItem);
Debug.WriteLine(string.Format("Image load for '{0}' finished.", viewItem.NativeId));
return url;
}).ContinueWith(async (t) =>
{
// send it back...
Debug.WriteLine(string.Format("Setting image for '{0}'...", viewItem.NativeId));
viewItem.ImageUri = (await t).Result;
}, TaskScheduler.FromCurrentSynchronizationContext());
}