private void button3_Click(object sender, System.EventArgs e) { try { lock (this) { List<IFOParse.VOB> vobs = null; IFOParse.ProgramChain pgc = null; List<IFOParse.Cell> cells = null; if (treeView1.SelectedNode == null) return; if (treeView1.SelectedNode.Tag.GetType() == typeof(FileInfo)) { // got single vob file FileInfo fi = (FileInfo)treeView1.SelectedNode.Tag; IFOParse.VOB v = new IFOParse.VOB(fi.FullName); vobs = new List<IFOParse.VOB>(); vobs.Add(v); // create dummy cell list cells = new List<IFOParse.Cell>(); IFOParse.Cell c = new IFOParse.Cell(); c.FirstSector = 0; c.LastSector = (int)v.LastSector; cells.Add(c); } else if (treeView1.SelectedNode.Tag.GetType() == typeof(IFOParse.ProgramChain)) { pgc = (IFOParse.ProgramChain)treeView1.SelectedNode.Tag; vobs = pgc.Title.VOBs; cells = pgc.Cells; } m_ds = new DSUtils(); ArrayList ranges = new ArrayList(); ArrayList vobNames = new ArrayList(); for (int c = 0; c < cells.Count; c++) { ranges.Add(cells[c].FirstSector); ranges.Add(cells[c].LastSector); } for (int v = 0; v < vobs.Count; v++) { vobNames.Add(vobs[v].FileInfo.FullName); vobNames.Add(vobs[v].Sectors); } m_ds.Preview(ranges, vobNames, panel1.Handle, trackBar1.Value); button3.Enabled = false; button4.Enabled = true; button5.Enabled = true; if (Settings.Default.AudioMode) { label9.Visible = true; label10.Visible = true; } m_videoThread = new Thread(new ThreadStart(PlaybackProgress)); m_videoThread.Start(); } } catch (Exception ex) { MessageBox.Show(String.Format("Error starting preview: {0}", ex.Message)); } }