У меня есть процесс, который должен запустить дочерний процесс и связаться с ним через стандартный ввод и вывод. Дочерний процесс должен иметь возможность автоматически завершать себя; Однако у меня возникают проблемы с правильным закрытием потоков.
Вот соответствующий код из дочернего / клиентского процесса:
// This is started in a separate thread
private void watchStandardInput() {
string line = null;
do {
try {
line = Console.ReadLine();
} catch (IOException) {
return;
}
lock (inputWatcher) {
switch (line) {
// process command
}
}
} while (line != null);
}
// This is called from the main thread
private void updateStatus(string statusMessage) {
lock (inputWatcher) {
Console.WriteLine(statusMessage);
}
}
А вот код "сервера":
// This is in the main thread
using (StreamReader sr = process.StandardOutput) {
while (!process.HasExited) {
processOutput(sr.ReadLine());
}
}
// Finally, commands are sent in a separate thread.
Теперь для проблемы, с которой я столкнулся: когда предполагается, что дочерний процесс завершается, сервер остается на sr.ReadLine()
, а клиент на Console.ReadLine()
. Что я делаю не так?