private void Worker_FilterImages(object sender, DoWorkEventArgs e) { if (!(sender is BackgroundWorker filteringWorker)) { return; } PlayerImageFolders filter = (PlayerImageFolders)e.Argument; Application.Current.Dispatcher.Invoke(delegate { FilteredImages.Clear(); }); for (var i = 0; i < _allImages.Count; i++) { var selectableImage = _allImages[i]; if (selectableImage.Path.Contains(filter.ToString())) { Application.Current.Dispatcher.Invoke(delegate { FilteredImages.Add(selectableImage); }); } int percentProgress = (int)Math.Ceiling(((float)i / _allImages.Count) * 100); filteringWorker.ReportProgress(percentProgress); } }
public void FilterImages(PlayerImageFolders filter) { BackgroundWorker filteringWorker = new BackgroundWorker { WorkerReportsProgress = true }; filteringWorker.DoWork += Worker_FilterImages; filteringWorker.ProgressChanged += Worker_ProgressChanged; filteringWorker.RunWorkerAsync(filter); }