private void StartMonitoring_Click(object sender, EventArgs e)
 {
     if (ProcNameInput.Text.Trim() == string.Empty)
     {
         label1.Text = "Proccess Field are Empty ???"; return;
     }
     TreeDisplay1.Nodes.Clear();
     NodeClickAction = NodeClickEvent.CopyToClipBoard;
     ProccessGrabber.RunWorkerAsync("catch-start");
     label1.Text = "Waiting for apps.....";
     MessageBox.Show("Run you apps now and I'll try to grab the information !");
 }
        private void ProccessGrabber_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            ThreadSafe.Invoke(this, GetAllProc, true, ThreadSafe.InvokeProperty.Enabled, ThreadSafe.InvokeMethod.SET);
            ThreadSafe.Invoke(this, StartMonitoring, true, ThreadSafe.InvokeProperty.Enabled, ThreadSafe.InvokeMethod.SET);

            if (e.Result.ToString().StartsWith("ENOENT - Proccess Not Found"))
            {
                GC.Collect();
                ProccessGrabber.RunWorkerAsync("catch-start --retry");
            }
            else if (e.Result.ToString() == "SUCCESS !")
            {
                ThreadSafe.Invoke(this, label1, String.Empty, ThreadSafe.InvokeProperty.Text, ThreadSafe.InvokeMethod.SET);
                TaskBarFlash.Flash(this);
                GC.Collect();
                return;
            }
        }
 private void GetAllProc_Click(object sender, EventArgs e)
 {
     TreeDisplay1.Nodes.Clear();
     NodeClickAction = NodeClickEvent.UseAsProccess;
     ProccessGrabber.RunWorkerAsync("list-all");
 }