/// <summary> /// 轨道导出流程中的回调函数 /// </summary> /// <param name="sender">Mkvextract原型</param> /// <param name="rate">进度0-100</param> void MkvExtractCallback(object sender, int rate) { Mkvextract objMkvExtract = (Mkvextract)sender; this.Invoke(new Action(() => { if (rate < 0) { MessageBox.Show(objMkvExtract.Error); } else if (rate < 100) { progressTrack.Value = rate; } else { progressTrack.Value = progressTrack.Maximum; if (MessageBox.Show("字幕文件导出完成,是否需要打开输出文件夹?", "导出成功", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { System.Diagnostics.Process.Start(Path.GetDirectoryName(objMkvExtract.SaveFilePath)); } progressTrack.Visible = false; } })); }
/// <summary> /// 初始化 /// </summary> public FormMain() { InitializeComponent(); MainPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; ObjMkvinfo = new Mkvinfo(GetMkvinfoDoneCallback); ObjMkvExtract = new Mkvextract(MkvExtractCallback); }
/// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripMenuItemOutput_Click(object sender, EventArgs e) { ListViewItem listViewItem = listViewTrack.SelectedItems[0]; MkvinfoTrack mkvinfoTrack = new MkvinfoTrack(ObjMkvinfo.Tracks[Convert.ToInt32(listViewItem.Text)]); mkvinfoTrack.TrackID = Convert.ToInt32(listViewItem.Text); mkvinfoTrack.Language = listViewItem.SubItems[3].Text; mkvinfoTrack.IsDefault = Convert.ToBoolean(listViewItem.SubItems[4].Text); mkvinfoTrack.Name = listViewItem.SubItems[5].Text; SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "导出字幕文件"; sfd.InitialDirectory = Path.GetDirectoryName(ObjMkvinfo.FilePath); sfd.Filter = @"字幕文件|*." + Regex.Match(mkvinfoTrack.CodecID, @"(?<=\/)\w+").Value.ToLower() + "|文本文件|*.txt|所有文件|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { string path = sfd.FileName; if (File.Exists(path)) { File.Delete(path); } // 输出文件,调用导出类 Mkvextract ObjMkvExtract = new Mkvextract(MkvExtractCallback); ObjMkvExtract.MkvFilePath = ObjMkvinfo.FilePath; ObjMkvExtract.SaveFilePath = path; ObjMkvExtract.Track = mkvinfoTrack; if (ObjMkvExtract.Start(out string msg)) { // 开始转换 progressTrack.Maximum = 100; progressTrack.Value = 0; progressTrack.Visible = true; progressTrack.BringToFront(); } } }