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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2012, 15:23   #1
sasha0192
Новичок
Джуниор
 
Регистрация: 05.05.2012
Сообщений: 1
По умолчанию Как правильно перехватывать данные из консоли

Доброе время суток

Вот перехватываю данные из консоли:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
 
namespace WindowsFormsApplication1
{
        public delegate void TextDelegate(string str);
 
    public partial class Form1 : Form
    {
 
        // внешний процесс
        public Process Proc;
        // поток выполнения процесса
        public Thread Thr;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void AddText(string str)
        {
            // в консоли выводится просто \n
            // для сохранения перевода строки добавляем \r
            richTextBox1.Text += str + "\r";
        }
 
        private void ExternalProcess()
        {
            // создаем внешний процесс, настраиваем его свойства
            Proc = new Process();
            Proc.StartInfo.CreateNoWindow = false;
            Proc.StartInfo.UseShellExecute = false;
            Proc.StartInfo.RedirectStandardOutput = true;
            Proc.StartInfo.FileName = @"D:\srcds.exe";
            Proc.StartInfo.Arguments = @"-console";
            // запускаем внешний процесс
            Proc.Start();
            // читаем его вывод и дописываем в текстбокс
            var del = new TextDelegate(AddText);
            var buf = new char[256];
            while (!Proc.HasExited)
            {
                var len = Proc.StandardOutput.Read(buf, 0, buf.Length);
                var str = new string(buf, 0, len);
                // для работы между потоками нужно использовать делегат
                richTextBox1.Invoke(del, str);
                System.Threading.Thread.Sleep(10);
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // убиваем поток при закрытии формы
            Thr.Abort();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // создаем новый поток выполнения внешнего процесса
            Thr = new Thread(new ThreadStart(ExternalProcess));
            Thr.Start();
        }
    }
}

Выводит это: CTextConsoleWin32::GetLine: !GetNumberOfConsoleInputEvent

В чем может быть проблема ?

Заранее спасибо!
Изображения
Тип файла: png 12.png (16.9 Кб, 46 просмотров)
sasha0192 вне форума Ответить с цитированием
Старый 05.05.2012, 19:46   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Цитата:
The problem is that srcds.exe expects its stdin to be a console, which it is not.

So you have to make not redirect stdin; instead it needs to inherit the console input handle of the parent process.
Попробуйте сразу запустить консоль cmd из консоли srcds - console
Reskov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Memo. как правильно считать мне данные NativeLand Общие вопросы Delphi 6 15.05.2011 00:46
Как правильно изменять данные в теблице БД!? AK BULLETS БД в Delphi 5 23.03.2010 11:18
Как правильно сохранить данные в таблицу??? kAtenok87 PHP 4 07.05.2009 11:24
Как правильно скопировать данные с одного текстового файла в другой? Dem80 Общие вопросы C/C++ 2 06.03.2009 22:17
Как правильно перехватывать появление новых строк на листе? neugadal Microsoft Office Excel 2 03.10.2008 11:01