void Worker_DoWork(object sender, DoWorkEventArgs e) { // Retrieve arguments int parentFileIndex = (int)(e.Argument as List <object>)[0]; MASSFile file = (MASSFile)(e.Argument as List <object>)[1]; int progressPercentage = 0; // Loop through all subfiles for (int i = 0; i < file.SubFileCount; i++) { // Recalculate current progress percent progressPercentage = Convert.ToInt32(((double)i / file.SubFileCount) * 100); // Report Progress List <object> progressState = new List <object> { parentFileIndex, i, file.SubFiles[i].Header.Name }; (sender as BackgroundWorker).ReportProgress(progressPercentage, progressState); // Sleep, sweet summer child Thread.Sleep(1); } e.Result = parentFileIndex; }
private void ParentFileRepack_Click(object sender, RoutedEventArgs e) { var parent = (TreeViewItem)FileTree.Items[0]; MASSFile context = (MASSFile)parent.DataContext; SaveFileDialog saveDialog = new SaveFileDialog { Filter = $"{context.Name} | *.*", FileName = context.Name }; if (saveDialog.ShowDialog() == true) { FileHandler.Save(saveDialog.FileName, context.GetData()); } // FileHandler.Save(); ; }
private void PopulateAsync(string targetFile) { // Clean up PropertyListView items for later PropertyListView.Items.Clear(); //FileHandler.GetFormat(targetFile); //XBNFile s = FileHandler.Open<XBNFile>(targetFile); // TODO: Don't assume type MASSFile MASSFile file = FileHandler.Open <MASSFile>(targetFile); // Clear Tree of previous files // TODO: remove this for multi-file support FileTree.Items.Clear(); // Add parent to file tree and save its index int parentFileIndex = FileTree.Items.Add(new TreeViewItem { DataContext = file, Header = $"{file.Name} ({file.SubFileCount} files)", IsExpanded = true }); ((TreeViewItem)FileTree.Items[parentFileIndex]).Selected += TreeViewFile_Selected; ((TreeViewItem)FileTree.Items[parentFileIndex]).ContextMenu = (ContextMenu)this.Resources["TreeViewItemContextMenu"]; // Create a new BackgroundWorker for populating FileTree BackgroundWorker worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += Worker_DoWork; worker.ProgressChanged += Worker_ProgressChanged; worker.RunWorkerCompleted += Worker_RunWorkerCompleted; // Execute worker, sending the parentIndex and MASSFile worker.RunWorkerAsync(new List <object> { parentFileIndex, file }); }