private void ToolStripSplitButtonConvert_ButtonClick(object sender, EventArgs e) { if (BackgroundWorkerProcess.IsBusy) { if (cts != null) { cts.Cancel(); } } else if (FolderBrowserDialogSave.ShowDialog(this) == DialogResult.OK) { OutDir = FolderBrowserDialogSave.SelectedPath; ListViewUPdb.AllowDrop = false; ToolStripSplitButtonConvert.Text = "取消"; ToolStripMenuItemCompatibility.Enabled = false; ToolStripMenuItemIdeal.Enabled = false; ToolStripSplitButtonConvert.ToolTipText = "取消转换任务。"; BackgroundWorkerProcess.RunWorkerAsync(); } }
private void BackgroundWorkerProcess_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { cts = new CancellationTokenSource(); var po = new ParallelOptions { CancellationToken = cts.Token, MaxDegreeOfParallelism = Environment.ProcessorCount }; try { Parallel.For(0, Books.Count, po, i => { if (Books[i].ToEPub($"{OutDir}\\《{Books[i].Title}》{Books[i].Author}_{DateTime.Now.ToString("yyMMddHHmmssffff")}.epub", ToolStripMenuItemIdeal.Checked)) { BackgroundWorkerProcess.ReportProgress(i, "完成"); } else { BackgroundWorkerProcess.ReportProgress(i, "失败"); } }); } catch (Exception ex) { var q = ex; } finally { if (cts != null) { cts.Dispose(); cts = null; } } }