c # Асинхронный захват из вывода процесса и отображение его в RichTextBox - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть richTextBoxLog, который является публичным и статичным.

После того, как я это объявил, я запускаю новый поток, который инициализирует новую переменную с именем proba. richTextBoxLog должно получить значение от proba.

Проблема в том, что proba нужно время для инициализации, и я хочу, чтобы richTextBoxLog инициализировался, пока proba инициализируется.

Я хочу написать что-то вроде:

richTextBoxLogFile.richTextBoxLog.Text + = proba;

Но, когда я пишу это в методе, который вызывается ранее упомянутым потоком, я получаю исключение: "Cross-thread operation not valid: Control 'richTextBoxLog' accessed from a thread other than the thread it was created on."

Я пытаюсь использовать это:

context.Post (new SendOrPostCallback (newMethod), (object) proba);

где context - это контекст основного потока, а newMethod инициализирует значение richTextBoxLog. Однако этот вызов находится в методе, который запускается новым потоком в цикле while:

  while (-1 != (ch = _reader.Read()))
        {
            Console.Write((char)ch);
            proba += ((char)ch).ToString();
            context.Post(new SendOrPostCallback(newMethod), (object)proba);                
        }
        _complete.Set();
    }

Теперь у меня проблема в том, что я хочу, чтобы newMethod вызывался каждый раз, когда я вхожу в цикл while. Но происходит следующее: цикл while завершается, и после этого новый метод вводится около тысячи раз.

1 Ответ

0 голосов
/ 28 сентября 2011

Вы можете использовать комбинацию Control.InvokeRequired и MethodInvoker.Смотрите аналогичный пост здесь: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9e6c83e-e36b-4f99-893e-0b242f4f225c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...