private async Task Extract(List <FileData> FileDatas) { System.Windows.Forms.FolderBrowserDialog extractToFolderDialog = new System.Windows.Forms.FolderBrowserDialog(); if (extractToFolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { CancellationTokenSource tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; unpacker.Token = token; progressBar = new Progress(); progressBar.Closing += (object s, CancelEventArgs c) => { tokenSource.Cancel(); }; progressBar.Show(); var toExtractFileStream = new FileStream(loadedOOF, FileMode.Open, FileAccess.Read); try { if (FileDatas == null) { await unpacker.UnpackAsync(extractToFolderDialog.SelectedPath); } else { await unpacker.UnpackAsync(extractToFolderDialog.SelectedPath, FileDatas); } } catch (Exception exc) { MessageBox.Show("An error has occurred! " + exc.Message, "OOF GUI", MessageBoxButton.OK, MessageBoxImage.Stop); } toExtractFileStream.Close(); progressBar.Close(); } }