private static void OnClearInstall(object sender, EventArgs e) { DialogResult result = MessageBox.Show("Are you sure you want to clear your current Wii U USB Helper install data?\nThis action cannot be undone.", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.Yes) { backgroundThread.Interrupt(); Cleanup(); ProgressDialog dialog = new ProgressDialog(); ProgressBar progressBar = dialog.GetProgressBar(); BackgroundWorker worker = dialog.GetWorker(); worker.DoWork += delegate(object obj, DoWorkEventArgs args) { string[] toRemove = new string[] { GetInstallPath(), GetInstallConfPath() }; foreach (string dir in toRemove) { if (Directory.Exists(dir)) { DirectoryInfo dirInfo = new DirectoryInfo(dir); var files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories); dialog.BeginInvoke(new Action(() => dialog.Reset(files.Length))); foreach (FileInfo file in files) { dialog.SetHeader("Removing: " + file.Name); file.Delete(); dialog.BeginInvoke(new Action(() => progressBar.PerformStep())); } var subDirs = dirInfo.GetDirectories(); dialog.BeginInvoke(new Action(() => dialog.Reset(subDirs.Length))); foreach (DirectoryInfo subDir in subDirs) { dialog.SetHeader("Removing: " + subDir.Name); subDir.Delete(true); dialog.BeginInvoke(new Action(() => progressBar.PerformStep())); } Directory.Delete(dir); } } dialog.BeginInvoke(new Action(() => dialog.Close())); }; worker.RunWorkerCompleted += delegate(object obj, RunWorkerCompletedEventArgs args) { Application.Exit(); }; new Thread(() => { Application.Run(dialog); }).Start(); worker.RunWorkerAsync(); } }