Если вы можете быть уверены, что экземпляр firefox уже не запущен, вы можете просто использовать Process.GetProcessesByName("firefox");
и использовать WaitForExit для этих процессов.
Если вы хотите обрабатывать несколько одновременных экземпляров firefox, которые у вас есть небольшая проблема, поскольку firefox управляет несколькими процессами по-своему. Когда вы запускаете firefox, он может просто попросить существующий процесс firefox создать новое окно, а затем выйти. Поэтому вам нужно будет обнаружить новый windows и отслеживать, когда это окно закрыто. Я не думаю, что есть какой-либо способ выполнить то, что вы хотите, просто ожидая процессов, по крайней мере, без сотрудничества с программой.
В конце концов, я бы попытался сделать все, что вы пытаетесь сделать, 1016 * другим способом. Возможно, вы можете разместить webcontrol внутри приложения? Или, возможно, вставьте копию Firefox Portable или другого автономного браузера в ваше приложение и запустите его вместо этого?