Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 21:25   #1
Radical_Edward
Пользователь
 
Аватар для Radical_Edward
 
Регистрация: 05.08.2010
Сообщений: 33
По умолчанию Перенаправление потоков консоли в форму

Здравствуйте, дорогие товарищи. В общем, есть проблема :
надо перенаправить выводящееся из консольного приложения в форму.
Написал рабочий, однако не до конца, код.

Код:
ProcessStartInfo pinfo = new ProcessStartInfo();
                pinfo.UseShellExecute = false;

                pinfo.RedirectStandardOutput = true;
                pinfo.RedirectStandardInput = true;
                pinfo.RedirectStandardError = true;
                pinfo.CreateNoWindow = true;
                pinfo.StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage);

                pinfo.FileName = @"ping.exe";

                process = new Process();
                process.StartInfo = pinfo;
                process.Start();

                while (!process.HasExited)
                {
                    richTextBox1.BeginInvoke(dc, new object[] { process.StandardOutput.ReadLine() });

                }
В общем, в данном случае, все чудесно заработает : мы увидим в richTextBox1'е текст, все такое.
Однако, программа работает так как надо не во всех случаях.Например,если консольная программа будет иметь код :

Код:
Console.WriteLine("Server Started Succesfully!\n");

            try
            {
                DirectoryInfo di = new DirectoryInfo("Tests");
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("\nTest  Files : " + di.GetFiles("*.xml").Length);

                di = new DirectoryInfo("Articles");
                Console.WriteLine("Articles  Files : " + di.GetFiles("*.xml").Length);

                di = new DirectoryInfo("Comments");
                Console.WriteLine("Comments  Files : " + di.GetFiles("*.cmt").Length);
            }
            catch (Exception) { }
То в текстбоксе мы увидим только Server Started Successfully!

Я так подозреваю, что проблема в синхронизации или в чем - то таком.
Подскажите, в чем я мог ошибиться. Почему в некоторых случаях выводится не весь текст
Radical_Edward вне форума Ответить с цитированием
Старый 04.12.2010, 21:51   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я не уверен, и не буду утверждать но первое что логическое приходит в голову так это:
1. код консольного приложения заключен в try { } catch (Exception) {}, и следовательно, если там ошибка (а она видимо в первых двух строках DirectoryInfo....) то следующий код (вывод в консоль) попросту не будет выполнен, и соответственно вы не увидите его у себя в приложении.

2. Удостоверится что код возврата консольного приложения нормальный, ибо у вас в приложении написано while (!process.HasExited) (на самом деле не уверен что это вообще такое, ибо не приходилось использовать)

Надеюсь помог.
BOBAH13 вне форума Ответить с цитированием
Старый 04.12.2010, 22:09   #3
Radical_Edward
Пользователь
 
Аватар для Radical_Edward
 
Регистрация: 05.08.2010
Сообщений: 33
По умолчанию

Спасибо за ответ, но я уверен, что проблема вовсе не в этом.

01)Код был приведен, как пример. На самом деле, мне надо запустить другое приложение, в котором никаких ошибок не вылетает.

02)Программа на этом не заканчивает свою работу и может выдать результат, например, через 5, 100, 0.005 минут.

К слову, скачал ряд примеров с codeproject'a. Ни один из них не смог запустить нужную программу.Есть только один рабочий, но он на С++
Radical_Edward вне форума Ответить с цитированием
Старый 05.12.2010, 10:40   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

А разве не проще вывести
Код:
 catch (Exception ex) { Console.WriteLine(ex.ToString()); }
dampirik вне форума Ответить с цитированием
Старый 05.12.2010, 12:43   #5
Radical_Edward
Пользователь
 
Аватар для Radical_Edward
 
Регистрация: 05.08.2010
Сообщений: 33
По умолчанию

dampirik, говорят : помолчи - сойдешь за умного. Вы же даже моего второго сообщения не прочитали
Radical_Edward вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перенаправление Card1nal Общие вопросы C/C++ 0 19.05.2010 17:00
Из консоли в форму Незлобин Помощь студентам 5 15.05.2010 13:44
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52
Перенаправление... neeer HTML и CSS 7 23.02.2009 11:16
Перенаправление потоков Carbon Win Api 5 25.11.2007 14:46