Please see: How to: Use a Background Worker
UI Class
public class UI
{
private JobFile JobFile { get; set; }
public int ProgressPercentage { get; set; }
public void getMD5Hash()
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += JobFile.bw_DoWork;
bw.ProgressChanged += bw_ProgressChanged;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync();
}
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// This would have to run on dispatcher in order to update UI
this.ProgressPercentage = e.ProgressPercentage;
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// If you need to do anything opn completion
}
}
And The JobFIle
public class JobFile
{
public string FullName { get; private set; }
public string FileName { get; private set; }
public string Extension { get; private set; }
public string Path { get; private set; }
public DateTime Date { get; private set; }
public long Size { get; private set; }
public string MD5Hash { get; private set; }
public void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
StringBuilder hash = new StringBuilder();
for (int i = 1; (i <= 10); i++)
{
// Perform a time consuming operation and report progress.
// Such as computing part of the hash.
hash.Append(i);
//Report progress here
worker.ReportProgress((i * 10)); //
}
MD5Hash = hash.ToString();
}
}
Although I would highly recommend using a Task for this.