Mam pewien malutki problem. Piszę aplikację, która ma coś odczytać albo napisać w konsoli innego programu. Na początku uruchomiłem sobie pierwszy lepszy program w konsoli i próbowałem tylko odczytać. Co prawda odczytywało, ale TYLKO gdy zamykało się konsolę. Na prawdę nie wiem na czym polegał mój błąd stworzyłem nowy wątek, w nim pętlę, która po kolei sobie czyta konsolę:
private void StartProcess(string path)
{
using (process = new Process())
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
Thread OutReader = new Thread(ReadStdOut);
process.Start();
OutReader.Start();
process.WaitForExit();
}
}
public void ReadOut()
{
try
{
string ReadedLine;
while ((!process.HasExited) && ((ReadedLine = process.StandardOutput.ReadLine()) != null))
System.Windows.Forms.MessageBox.Show(ReadedLine);
}
catch (InvalidOperationException)
{
System.Windows.Forms.MessageBox.Show("Output hasn't been redirected or process has exited.");
}
}
No i nie wyskakiwały żadne okienka, tylko, jak mówiłem, po zamknięciu pojawiały się OBA komunikaty, na prawdę nie mam pojęcia co jest nie tak. Później, zdesperowany, po prostu zrobiłem timer i tam kod podobny jak wcześniej, tylko zamiast while if. Ale dalej wyskakiwały jakieś błędy. Teraz chciałem sprawdzić czy będzie działać na konsoli, którą sam napiszę. Więc dałem po prostu:
Console.Write("Czesc, dziala?\n");
Console.ReadKey();
Ale gdy uruchamiałem ten proces poprzez mój program wywalało taki błąd, na którym ja zawsze klikam "Nie wysyłaj" :-D . Potem doszedłem, że to przez process.StartInfo.RedirectStandardInput = true;
. Gdy się to usuwało wszystko było ok, ale nie czytało, ponieważ czytanie nie działa bez tego. :-[ Następnym krokiem było dodanie do tej mojej konsoli tego:
System.Diagnostics.Process.GetCurrentProcess().StartInfo.RedirectStandardInput = true;
System.Diagnostics.Process.GetCurrentProcess().StartInfo.RedirectStandardOutput = true;
i bloku try, żeby sprawdzić, czy złapię wyjątek, który psuje konsolę, gdy uruchamiam ją przez mój program (pogmatwane, nie? :-P ). Ale dalej to samo (nawet żadnego komunikatu z catch?). Możliwe też, że takie przypisanie RedirectStandartOutput po starcie procesu jest niemożliwe, ale tego nie wiem. Potem jeszcze spróbowałem coś napisać w konsoli, lecz z podobnym skutkiem. Mam nadzieję, że sprawę opisałem jasno :-D . Proszę, jeżeli ktoś miał podobny problem i/lub poradził sobie z tym, niech mi pomoże.
Z góry dzięki, Wronq.