从进程输出中异步捕获并在RichTextBox中显示
本文关键字:RichTextBox 显示 进程 输出 异步 | 更新日期: 2023-09-27 18:09:59
我有一个公共的和静态的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."
我试着用这个:
上下文。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循环结束之后newMethod被输入了大约1000次
可以使用Control。invokerrequired和MethodInvoker的组合。在这里看到类似的帖子:http://social.msdn.microsoft.com/forums/en - us/csharpgeneral/thread/b9e6c83e e36b - 4 - f99 - 893 e - 0 - b242f4f225c