/// <summary> /// Called when image loading is done. /// /// effects: switch the image loading state to Idle. /// </summary> private void ImageLoadingDone() { imageLoadingState = ImageLoadingState.Idle; imageLoadingDone = null; }
public void RefreshThumbnails(ImageCollection images) { if (imageLoadingState == ImageLoadingState.Loading || imageLoadingState == ImageLoadingState.CancelLoading) { CancelLoading(images); return; } Debug.Assert(imageLoadingState == ImageLoadingState.Idle); // Show them in list view. Items.Clear(); ImageList imageListLarge = new ImageList(); imageListLarge.ColorDepth = ColorDepth.Depth24Bit; imageListLarge.ImageSize = new Size( cxThumbnail, cyThumbnail); LargeImageList = imageListLarge; BeginUpdate(); // Add items first to prevent flickers. foreach (ImageInfo imageFile in images) { ListViewItem item = new ListViewItem(); item.ImageIndex = -1; item.Text = Path.GetFileName(imageFile.ImagePath); item.Tag = imageFile; Items.Add(item); } EndUpdate(); // Switch the state. imageLoadingState = ImageLoadingState.Loading; imageLoadingDone = new ThumbnailLoadingDoneDelegate(ImageLoadingDone); // Use asynchronous delegate to load image thumbnails. LoadThumbnailsDelegate loadThumbnails = new LoadThumbnailsDelegate(LoadThumbnails); loadThumbnails.BeginInvoke( images, null, new Object()); }
private void CancelLoading(ImageCollection images) { imagesToRefresh = images; // remove all attached ImageInfo before canceling the loading to prevent flash foreach (ListViewItem item in Items) { item.Tag = null; } // change the status to cancel image loading imageLoadingState = ImageLoadingState.CancelLoading; // delay the refresh until image loading is canceled imageLoadingDone = new ThumbnailLoadingDoneDelegate(ImageLoadingDoneAndRefresh); }