I'm on WPF application and I'm using OpenFileDialog to load many images. At the same i'm calling many function to convert images based on selection of some checkBoxes. If i select 100 images it'll take approximately 1 minute to process, so I would like to handle it by 'BackGroundWorker _ doWork".
First I load the images to a temporary dir and apply some functions & then transfer images to another directory.
I don't know how can i handle this, please help me. Thank you.
private void b35x5Files_Click(object sender, RoutedEventArgs e) { bgw.RunWorkerAsync(); } void bgw_DoWork(object sender, DoWorkEventArgs e) { var backgroundWorker = sender as BackgroundWorker; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Image files (*.jpg; *.jpeg; *.gif; *.tiff; *.png) | *.jpg; *.jpeg; *.gif; *.tiff; *.png"; dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); dialog.Title = "Images"; dialog.Multiselect = true; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { int finalcountvalue = dialog.FileNames.Length + fileCount35x5; fileCount35x5 = dialog.FileNames.Length; foreach (string fileName in dialog.FileNames)//Copy files to a temp directory { System.IO.File.Copy(fileName, tdestination_dir35x5 + @"\" + System.IO.Path.GetFileName(fileName), true); } fliptToVertical();// To change the image Orinetation if (c35x5ftimage.IsChecked == true)//CheckBox for AutoColorCorrection { //MessageBox.Show("Hi, focker"); } if (c35x5sepia.IsChecked == true)//CheckBox for Sepai Tone { doSepia(destination_dir35x5); } if (c35x5grayscale.IsChecked == true)//CheckBox for GrayScale Tone { doGrayScale(destination_dir35x5); } try // After finishing the above funciton move files to main directory { foreach (string path in Directory.GetFiles(tdestination_dir35x5, "*.*", SearchOption.TopDirectoryOnly)) File.Copy(path, path.Replace(tdestination_dir35x5, destination_dir35x5), true); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e) { pbProcessing.Value = e.ProgressPercentage; } void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { pbProcessing.Value = 100; MessageBox.Show("Finisheed ", "Completed", MessageBoxButton.OK, MessageBoxImage.Information); }