private bool LaunchLocal() { string dbFile = m_resultsFileTextBox.Text; if (!m_launcher.CheckParams()) { return(false); } //connect to data engine before launching the process -- we don't want to launch if this fails IDataEngine data = null; if (m_connectCheckBox.Checked) { try { this.Cursor = Cursors.WaitCursor; if (m_sqliteRadio.Checked) { data = new SQLiteEngine(dbFile, true); } else if (m_sqliteMemoryRadio.Checked) { data = new SQLiteMemoryEngine(); } else { throw new NotImplementedException(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Launch Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } finally { this.Cursor = Cursors.Default; } } if (!m_launcher.Launch()) { if (data != null) { data.Dispose(); } return(false); } //connect, if we're asked to if (m_connectCheckBox.Checked) { ConnectProgress progress = new ConnectProgress("localhost", m_launcher.ListenPort, data, 10); progress.ShowDialog(this); if (progress.Client != null) { Connection conn = new Connection(data); conn.Executable = m_launcher.Name; conn.RunClient(progress.Client); //TODO: set options like auto snapshot frequency conn.SetAutoSnapshots(10000, false); var profilerWindow = new ProfilerWindow(m_mainWindow, conn); profilerWindow.Show(); TypeEntry visEntry = m_visualizerCombo.SelectedItem as TypeEntry; if (visEntry != null && visEntry.Type != null) { profilerWindow.AddVisualizer(visEntry.Type); } profilerWindow.BringToFront(); } else { //connection failed, shut down the storage data.Dispose(); } } return(true); }