public void CloseProcess(Models.ProcessTree selectedProcess)
        {
            Process currentProcess = Process.GetProcessById(selectedProcess.ProcessId);

            currentProcess.Kill();
            RemoveSelectedItem(selectedProcess);
        }
 private void FindInChild(Models.ProcessTree selectedProcess, ICollection <Models.ProcessTree> child)
 {
     foreach (Models.ProcessTree process in child)
     {
         if (process == selectedProcess)
         {
             child.Remove(process);
             break;
         }
         else if (process.ChildTree.Count > 0)
         {
             FindInChild(selectedProcess, process.ChildTree);
         }
     }
 }
        public void CreateTree()
        {
            GetProcessesList();
            var orderedProcessesByParrentId = allProcesses.OrderBy(node => node.ParrentId).ToArray();

            for (int i = 0; i < orderedProcessesByParrentId.Length; ++i)
            {
                Models.ProcessTree parent = FindInTree(orderedProcessesByParrentId[i].ParrentId);
                if ((orderedProcessesByParrentId[i].ParrentId == 0 && orderedProcessesByParrentId[i].ProcessId == 0) || parent == null)
                {
                    processTrees.Add(orderedProcessesByParrentId[i]);
                }
                else
                {
                    parent.ChildTree.Add(orderedProcessesByParrentId[i]);
                }
            }
        }
 private Models.ProcessTree FindInTree(int id)
 {
     Models.ProcessTree finded = null;
     foreach (Models.ProcessTree node in allProcesses)
     {
         if (node.ProcessId.Equals(id))
         {
             finded = node;
             break;
         }
         else if (node.ChildTree.Count != 0)
         {
             finded = FindInNode(node, id);
             if (finded != null)
             {
                 break;
             }
         }
     }
     return(finded);
 }
 private Models.ProcessTree FindInNode(Models.ProcessTree node, int id)
 {
     Models.ProcessTree finded = null;
     foreach (Models.ProcessTree child in node.ChildTree)
     {
         if (child.ProcessId.Equals(id))
         {
             finded = child;
             break;
         }
         else if (child.ChildTree.Count != 0)
         {
             finded = FindInNode(child, id);
             if (finded != null)
             {
                 break;
             }
         }
     }
     return(finded);
 }
        private void RemoveSelectedItem(Models.ProcessTree selectedProcess)
        {
            var deleted = false;

            foreach (Models.ProcessTree process in processTrees)
            {
                if (process == selectedProcess)
                {
                    processTrees.Remove(process);
                    deleted = true;
                    break;
                }
            }
            if (!deleted)
            {
                foreach (Models.ProcessTree process in processTrees)
                {
                    if (process.ChildTree.Count > 0)
                    {
                        FindInChild(selectedProcess, process.ChildTree);
                    }
                }
            }
        }