Как перенаправить стандартный вывод из моего приложения NET 4.8C#

Место общения программистов C#
Anonymous
Как перенаправить стандартный вывод из моего приложения NET 4.8

Сообщение Anonymous »

Я пытаюсь перенаправить стандартный вывод моего приложения Net 4.8. Это код, который я использую:

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

private  async void button_Export(object sender, RoutedEventArgs e)
{
try
{
foreach (var item in myList.Items)
{
await RunProcessAsync(@"MyProcess.exe", item.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred: {ex.Message}");
}
}

private Task RunProcessAsync(string fileName, string arguments)
{

return Task.Run(() =>
{
using (var process = new Process())
{
process.StartInfo.FileName = fileName;
process.StartInfo.Arguments = arguments;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
// handling output
process.OutputDataReceived += (sender, e) =>
{
if (e.Data != null)
{
lineCount++;
output.Append("\n[" + lineCount + "]: " + e.Data);
// MessageBox.Show($"output: {output}"); //this works
richTextBox1.AppendText(output.ToString()); //this throws an error
}
};
process.ErrorDataReceived += (sender, e) =>
{
if (e.Data != null)
{
// Handle standard error here
}
};

process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();

process.WaitForExit(); // Wait for the process to exit
}
});
}
MessageBox.Show() отображает желаемый результат, но при отправке в richTextBox1 я получаю ошибку.
«вызывающий поток не может получить доступ к этому объект, потому что им владеет другой поток».
Любая помощь будет принята с благодарностью

Подробнее здесь: https://stackoverflow.com/questions/790 ... pplication

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