Создайте процесс, установите для параметра EnableRaisingEvents значение true и обработайте событие Exited
:
Process p = new Process();
p.StartInfo.FileName = pathToApp;
p.EnableRaisingEvents = true;
p.Exited += OnCalibrationProcessExited; // hooks up your handler to the Process
p.Start();
// Now .NET will call this method when the process exits
private void OnCalibrationProcessExited(object sender, EventArgs e)
{
// set Topmost
}
Из потока комментариев событие Exited возникает в рабочем потоке, поэтому вам нужно будет использоватьDispatcher.BeginInvoke для переключения на поток пользовательского интерфейса для установки Topmost:
private void OnCalibrationProcessExited(object sender, EventArgs e)
{
Action action = () => { /* set Topmost */ };
Dispatcher.BeginInvoke(DispatcherPriority.Normal, action);
}
(предполагается, что код находится в вашем классе Window. Если нет, вам нужно будет написать что-то вроде Application.Current.MainWindow.Dispatcher.BeginInvoke(...)
.)
Примечание. Я отделил создание и настройку объекта Process от его запуска.Хотя это более многословно, необходимо убедиться, что все средства обработки событий находятся на месте до процесса, иначе процесс может завершиться до того, как вы поместите обработчик на место (маловероятно, но теоретически возможно)!) и ваш обработчик никогда не будет вызван.