void Execute(string cmdPath, string cmdExe, string cmdArgs, string title, int delay)
        {
            ConsoleData data = new ConsoleData(cmdPath, cmdExe, cmdArgs, title, delay, new ServicePanel(maxConsoleLines), new Process());

            CreateTabPageDelegate d = new CreateTabPageDelegate(CreateTabPage);
            Invoke(d, new object[] { data });
            btnStart_Click(data.panel.btnStart, new EventArgs());
        }
 void SetConsoleState(ConsoleData data, bool Enable)
 {
     try
     {
         Invoke(new MethodInvoker(delegate {
             data.tab.ImageIndex = Enable ? 1 : 0;
             data.panel.btnStart.Enabled = !Enable;
             data.panel.btnSendCtrlC.Enabled = Enable;
         }));
     }
     catch (ObjectDisposedException)
     {
         // ignore this, it only happens when closing the app
     }
     catch (InvalidOperationException)
     {
         // ignore this, it only happens when closing the app
     }
 }
        private void CreateTabPage(ConsoleData data)
        {
            DockingTabPage tab = new DockingTabPage(data.title);
            tab.ContextMenuStrip = contextMenuStrip2;
            tabControl1.ImageList = imageList1;
            tab.Controls.Add(data.panel);
            tab.ImageIndex = 0;
            tab.Tag = data;
            data.panel.Dock = DockStyle.Fill;
            tabControl1.TabPages.Add(tab);
            data.tab = tab;
            data.panel.btnStart.Click += new System.EventHandler(this.btnStart_Click);
            data.panel.btnStart.Tag = data;
            if (System.IO.File.Exists(CtrlCHelperPath))
            {
                data.panel.btnSendCtrlC.Enabled = true;
                data.panel.btnSendCtrlC.Visible = true;
                data.panel.btnSendCtrlC.Click += new System.EventHandler(this.btnSendCtrlC_Click);
                data.panel.btnSendCtrlC.Tag = data;
            }
            else
            {
                data.panel.btnSendCtrlC.Enabled = false;
                data.panel.btnSendCtrlC.Visible = false;
            }

            data.panel.btnKill.Click += new System.EventHandler(this.btnKill_Click);
            data.panel.btnKill.Text = "Kill all " + data.title + "instances";
            data.panel.btnKill.Tag = data;

            data.panel.btnClear.Click += new System.EventHandler(this.btnClear_Click);
            data.panel.btnClear.Tag = data;

            dicPanel[tab] = data.panel;
        }