У меня возникают трудности с перенаправлением вывода из консольного приложения в приложение Windows Form, когда процесс создается в отдельном файле * .dll (извините за неаккуратную терминологию, но я новичок в программировании). Я натолкнулся на эту ссылку (и могу воспользоваться его методом), подробно описав похожую проблему: http://www.codeproject.com/KB/threads/launchprocess.aspx?msg=3087118 Я могу прочитать одну строку с консоли, но как заставить ее оставаться открытой?
Так что в основном мой вопрос заключается в том, как правильно обращаться к выводу потоковой программы из отдельного класса?
Приведенный ниже код отлично работает при локальном вызове.
private void exampleErrorRedirection()
{
Process proc = new Process();
proc.StartInfo.FileName = /exampleconsoleapp.exe;
proc.StartInfo.Arguments = "some arguments that work";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
if (!proc.Start())
{
Console.WriteLine("Error starting");
return;
}
StreamReader reader = proc.StandardError;
string line;
while ((line = reader.ReadLine()) != null)
{
textBoxForStandardError.Text = line;
}
proc.Close();
}
Однако я хочу иметь возможность перенаправлять вывод из отдельного класса при вызове. Я могу только получить первую строку из консоли, и она не обновляется.
private void exampleErrorRedirection()
{
exampleDLLFile.startProc ConsoleApp new exampleDLLFile.startProc();
ConsoleApp.Run();
while (convert.line != null)
{
textBoxForStandardError.Text = ConsoleApp.line;
}
}
где класс содержит метод, подобный следующему:
public class convertFile
{
public string line;
public void Run()
{
Process proc = new Process();
proc.StartInfo.FileName = /exampleconsoleapp.exe;
proc.StartInfo.Arguments = "some arguments that work";
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
if (!proc.Start())
{
Console.WriteLine("Error starting");
}
StreamReader reader = proc.StandardError;
while ((line = reader.ReadLine()) != null)
{
line = reader.ReadLine();
}
proc.Close();
}
}