none
process.OutPutDataRecieved - непонятно RRS feed

  • Вопрос

  • Друзья, 
    объясните мне пожалуйста.

    Я запустил процесс консольки с асинхронным чтением выходного текста.

    private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
            {
                InvokeToForm(consoleOut, e.Data);
            }
    
            private void consoleOut(string s)
            {
                _rtx.Text += s;
            }
    
            private void unpack()
            {
                process = new Process();
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardOutput = true;
                process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
                process.StartInfo.FileName = Cmd + "\\unpack.exe";
                process.StartInfo.Arguments = args;
                process.StartInfo.CreateNoWindow = true;
                process.Start();
    
                process.BeginOutputReadLine();
            }
    
            private void InvokeToForm(pex_s d, string s)
            {
                pex_s p = d;
                Form f = Application.OpenForms["Form1"];
                f.Invoke(p, s);
            }
    
    как видно, я делаю из другого потока забивание выходных данных в текст бокс, который находится  в потоке формы.
    дак вот, проблема в том, что OutPutDataRecieved почему-то отрабатывает все данные только когда процесс завершиться, а мне надо в процессе работы консольки (около 2 минут) текстовые данные собирать и обрабатывать и выводить в текст бокс, а пока что они туда попадают один раз и только после окончания... =(

    как мне быть ????

    Примечание:
    У отдельного потока, в котором я запускаю процесс консольки, я уже пытался менять приоритет даже до самого высокого. ноль эффекта.

    Спасибо, 
    Алекс.

    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:38 MSDN Forums Consolidation (От:Visual C#)
    20 декабря 2009 г. 12:37

Ответы

  • Видимо process.BeginOutputReadLine() находится в UI потоке, поэтому UI ждет. Нужно вызывать unpack() не из UI потока.
    • Предложено в качестве ответа creomobile 20 декабря 2009 г. 21:26
    • Помечено в качестве ответа I.Vorontsov 25 декабря 2009 г. 8:13
    20 декабря 2009 г. 21:26