/// <summary> /// Makes a request to download the image from the server and raises the <see cref="cachedFileCallback"/> when it's down.<br/> /// </summary> /// <param name="imageUri">The online image uri</param> /// <param name="filePath">the path on disk to download the file to</param> /// <param name="async">is to download the file sync or async (true-async)</param> /// <param name="cachedFileCallback">This callback will be called with local file path. If something went wrong in the download it will return null.</param> public void DownloadImage(Uri imageUri, string filePath, bool async, DownloadFileAsyncCallback cachedFileCallback) { ArgChecker.AssertArgNotNull(imageUri, "imageUri"); ArgChecker.AssertArgNotNull(cachedFileCallback, "cachedFileCallback"); // to handle if the file is already been downloaded bool download = true; lock (_imageDownloadCallbacks) { if (_imageDownloadCallbacks.ContainsKey(filePath)) { download = false; _imageDownloadCallbacks[filePath].Add(cachedFileCallback); } else { _imageDownloadCallbacks[filePath] = new List<DownloadFileAsyncCallback> { cachedFileCallback }; } } if (download) { var tempPath = Path.GetTempFileName(); if (async) ThreadPool.QueueUserWorkItem(DownloadImageFromUrlAsync, new DownloadData(imageUri, tempPath, filePath)); else DownloadImageFromUrl(imageUri, tempPath, filePath); } }
/// <summary> /// Makes a request to download the image from the server and raises the <see cref="cachedFileCallback"/> when it's down.<br/> /// </summary> /// <param name="imageUri">The online image uri</param> /// <param name="filePath">the path on disk to download the file to</param> /// <param name="async">is to download the file sync or async (true-async)</param> /// <param name="cachedFileCallback">This callback will be called with local file path. If something went wrong in the download it will return null.</param> public void DownloadImage(Uri imageUri, string filePath, bool async, DownloadFileAsyncCallback cachedFileCallback) { ArgChecker.AssertArgNotNull(imageUri, "imageUri"); ArgChecker.AssertArgNotNull(cachedFileCallback, "cachedFileCallback"); // to handle if the file is already been downloaded bool download = true; lock (_imageDownloadCallbacks) { if (_imageDownloadCallbacks.ContainsKey(filePath)) { download = false; _imageDownloadCallbacks[filePath].Add(cachedFileCallback); } else { _imageDownloadCallbacks[filePath] = new List <DownloadFileAsyncCallback> { cachedFileCallback }; } } if (download) { var tempPath = Path.GetTempFileName(); if (async) { ThreadPool.QueueUserWorkItem(DownloadImageFromUrlAsync, new DownloadData(imageUri, tempPath, filePath)); } else { DownloadImageFromUrl(imageUri, tempPath, filePath); } } }