Console.Write+Flush поведение, отличное от Console.WriteLineC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Console.Write+Flush поведение, отличное от Console.WriteLine

Сообщение Anonymous »

У меня есть исполняемый файл net8.0 в Windows 11, который запускает другой исполняемый файл, а затем прослушивает его выходные данные:

Код: Выделить всё

public static int Main(string[] args)
{
var executable = @"hardcoded path to childprocess.dll";
var psi = new ProcessStartInfo(executable)
{
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using var process = Process.Start(psi)!;
process.OutputDataReceived += (_, dataReceivedEventArgs) => ProcessOnOutputDataReceived(dataReceivedEventArgs, Console.Out);
process.BeginOutputReadLine();
process.WaitForExit();
return process.ExitCode;
}

private static void ProcessOnOutputDataReceived(DataReceivedEventArgs args, TextWriter textWriter)
{
// never called for Console.Write + Flush
// called without issues with Console.WriteLine
if (args.Data is var data and not null)
{
textWriter.WriteLine(data);
}
}
Это отлично работает, если дочерний процесс использует Console.WriteLine, но я не могу заставить его работать с Console.Write + Flush, что, как я полагаю, будет эквивалентно.
Это прекрасно работает, если дочерний процесс использует Console.WriteLine, но я не могу заставить его работать с Console.Write + Flush, что, как я полагаю, будет эквивалентно.
п>

Код: Выделить всё

public static void Main(string[] args)
{
Console.Write("Output never visible :(");
Console.Out.Flush();

// Console.WriteLine("This works perfectly fine!");
Console.ReadLine(); // just to stop the process from quitting.
}
При отладке кода я вижу, что _autoFlush все равно включен, поэтому мне даже не понадобится явный сброс после этого.
Для сброса мы попадаем в ConsolePal ::WriteFileNative с параметром useFileAPI, установленным в значение true, что означает, что в конечном итоге мы вызываем Kernel32.WriteFile, который возвращает правильно записанное количество символов.
Вызов FlushFileBuffers с дескриптором файла также не имеет значения.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -writeline
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Console.Write+Flush поведение, отличное от Console.WriteLine
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Почему Console.Writeline, Console.Write не работают в Visual Studio Express?
    Anonymous » » в форуме C#
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Как может быть «iw dev Wlan1 -Flush -Flush» с тем же адаптером с тем же адаптером и тем же драйвером на одной системе, ч
    Anonymous » » в форуме Linux
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между Console.WriteLine и Console.Out.WriteLineAsync в асинхронном методе?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между Console.WriteLine и Console.Out.WriteLineAsync в асинхронном методе?
    Anonymous » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»