void DoExport(Portion portion = null) { exportTabs.SelectedTabPage = logTabPage; log.Clear(); if (portion == null && !exporter.AnyNewDataToExport()) { exporter_OnMessage(Program.LanguageManager.GetString(StringResources.Export_NoData)); return; } SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = Program.LanguageManager.GetString(StringResources.Export_Filter) + Resources.prizm; if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } exporter.ArchiveName = dlg.FileName; exporter.OnMessage -= exporter_OnMessage; exporter.OnDone -= exporter_OnDone; exporter.OnError -= exporter_OnError; exporter.OnMessage += exporter_OnMessage; exporter.OnDone += exporter_OnDone; exporter.OnError += exporter_OnError; progressPanel.Visible = true; Task task = portion == null ? new Task(() => exporter.Export()) : new Task(() => exporter.Export(portion)); task.ContinueWith((_) => { if (progressPanel.InvokeRequired) { progressPanel.Invoke(new MethodInvoker(() => { progressPanel.Visible = false; })); } else { progressPanel.Visible = false; } LoadPortions(); }); task.Start(); }