我有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();
}
我现在遇到的问题是每次进入while循环时都要调用newMethod。但是,发生的事情是:while循环结束,之后newMethod被输入大约一千次。
答案 0 :(得分:0)
您可以使用Control.InvokeRequired和MethodInvoker组合。在这里查看类似的帖子: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9e6c83e-e36b-4f99-893e-0b242f4f225c