Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Use or extend System.ComponentModel.BackgroundWorker:<br> <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx" rel="nofollow noreferrer">http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx</a></p> <p>Personally, I find this to be the easiest way to perform asynchronous operations in client apps. (I've used this in WinForms, but not WPF. I'm assuming this will work in WPF as well.)</p> <p>I usually extend Backgroundworker, but you dont' have to.</p> <pre><code>public class ResizeFolderBackgroundWorker : BackgroundWorker { public ResizeFolderBackgroundWorker(string sourceFolder, int resizeTo) { this.sourceFolder = sourceFolder; this.destinationFolder = destinationFolder; this.resizeTo = resizeTo; this.WorkerReportsProgress = true; this.DoWork += new DoWorkEventHandler(ResizeFolderBackgroundWorker_DoWork); } void ResizeFolderBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { DirectoryInfo dirInfo = new DirectoryInfo(sourceFolder); FileInfo[] files = dirInfo.GetFiles("*.jpg"); foreach (FileInfo fileInfo in files) { /* iterate over each file and resizing it */ } } } </code></pre> <p>This is how you would use it in your form:</p> <pre><code> //handle a button click to start lengthy operation private void resizeImageButtonClick(object sender, EventArgs e) { string sourceFolder = getSourceFolderSomehow(); resizer = new ResizeFolderBackgroundWorker(sourceFolder,290); resizer.ProgressChanged += new progressChangedEventHandler(genericProgressChanged); resizer.RunWorkerCompleted += new RunWorkerCompletedEventHandler(genericRunWorkerCompleted); progressBar1.Value = 0; progressBar1.Visible = true; resizer.RunWorkerAsync(); } void genericRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { progressBar1.Visible = false; //signal to user that operation has completed } void genericProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; //I just update a progress bar } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload