foreach (Process p in Process.GetProcesses())
{
string strName = listBox1.SelectedItem.ToString();
if (p.ProcessName == strName)
{
p.Kill();
}
listBox1.Items.Remove(strName);
}
В вашем коде есть логическая ошибка. Вы вызываете метод Remove (), даже если имя процесса не соответствует , а не . Этот код может работать только в том случае, если выбранный элемент является первым, возвращаемым GetProcesses (), для этого очень низкие шансы. Гораздо более распространенный результат заключается в том, что вы удаляете элемент из списка на самом первом проходе цикла и в итоге ничего не убиваете. Легко увидеть с помощью отладчика.
Простой обходной путь - переместить вызов Remove () в блок оператора if ().
Совершенно лучший подход:
foreach (var p in Process.GetProcessesByName(listBox1.SelectedItem.ToString()) {
p.Kill();
}