private void SaveFileSystemImageToFile(FileSystemDrive fileSystemDrive, string path, string password) { var storageManagerProgress = new Progress <StorageManagerProgress>(); LoadAndSaveProgressBar.Visible = true; storageManagerProgress.ProgressChanged += (s, e) => { LoadAndSaveProgressBar.Value = e.ProgressPercentage; LoadAndSaveProgressInfoLabel.Text = e.Text; }; saveAsToolStripMenuItem.Enabled = false; saveToolStripMenuItem.Enabled = false; Task.Run(async() => { var settings = new StorageManagerSettings(true, Environment.ProcessorCount, true, password); var storageManager = new StorageManager(settings); bool success = await storageManager.SerializeObjectToFileAsync(fileSystemDrive, path, storageManagerProgress); OutcomeEventArgs outcomeEventArgs = success ? OutcomeEventArgs.Success : OutcomeEventArgs.Failure; SaveFileEventHandler onSaveComplete = HandleSaveFileComplete; BeginInvoke(onSaveComplete, this, outcomeEventArgs); }); }
static OutcomeEventArgs() { Failure = new OutcomeEventArgs { Successful = false }; Success = new OutcomeEventArgs { Successful = true }; }
protected void HandleSaveFileComplete(object sender, OutcomeEventArgs eventArgs) { LoadAndSaveProgressBar.Visible = false; saveAsToolStripMenuItem.Enabled = true; saveToolStripMenuItem.Enabled = true; LoadAndSaveProgressInfoLabel.Text = eventArgs.Successful ? "Successfuly saved file" : "Faild to save file"; Task.Run(async delegate { await Task.Delay(5000); ResetLoadAndSaveProgress(); }); MemoryHandler.RunGarbageCollect(); }