В прошлом мне нужно было запустить инструмент не-gui C# из инструмента GUI C#, оба из которых я написал. Я использовал стандартные потоки ввода/вывода для обмена данными между обоими инструментами.
Вы можете заставить свой инструмент C++ прослушивать его stdin
для команды, которая указывает, что инструмент должен выйти изящно. Затем, в своем приложении C#, отправьте команду quit, подождите достаточное количество времени, и если инструмент не закончится к тому времени, убейте его.
Я сожалею, что мой C++ не достаточно хорошо, чтобы дать вам пример для стороны C++, но следующие строки используются в моей C# проекта сказать внешний процесс до конца:
m_consoleProcess.StandardInput.WriteLine("QUIT");
m_consoleProcess.WaitForExit(10000);
if (!m_consoleProcess.HasExited)
{
m_consoleProcess.Kill();
}
Если вам нужно управлять отдельными внешними процессами, конечно, вам нужно сохранить один экземпляр Process
для каждого из них, и вам нужно обработать случай, когда внешний процесс был завершен до того, как ваше приложение завершит работу.
Класс должен иметь метод Dispose(), который выполняет очистку и закрывает любые объекты, которые необходимо закрыть (или прекратить выполнение). – jdweng
Я думаю, вы не должны использовать Process.Kill(). Скорее отправьте сообщение (udp ...) между двумя приложениями и, когда закончите, его действия убьют. –
[Также есть пример для async:] (http://stackoverflow.com/a/611127/3060520) –