2017-04-12 33 views

回答

0

您不能从除主线程以外的任何线程中更改UI组件。

尝试以下操作:

richTextBox1.Invoke(new Action(() => { richTextBox1.Text = val.ToString(); })); 

调用导致要在UI线程中运行指定的动作。

+0

我得到了和图表相同的错误:( – rhsn

+0

@rhsn然后你必须对图表做相同的处理(你必须调用它),否则,考虑为图表提供代码 – MetaColon

+0

@rhsn如果你有同样的错误,那么它应该是相当明显的是什么是需要修复它。 –

0

正如异常告诉你的,你试图访问另一个线程上的UI元素,而不是它的创建。但是,您必须知道UI元素只能由您创建它们的线程访问。你可能在主线程上创建了这个UI元素(这意味着你在正常情况下创建它,而不是在异步上下文中),但试图在另一个线程(可能在异步上下文中)访问它。无论如何要访问它,您必须调用您想要对您创建的线程上的元素执行的任何操作。但是你不必知道你创建了哪个线程,因为UI元素本身就知道它。要调用它在它的线程使用Invoke

var val1 = (string)val.Clone(); 
if(richTextBox1.InvokeRequired) 
    richTextBox1.Invoke(new Action(() => richTextBox1.Text = val1)); 
else 
    richTextBox1.Text = val1; 

你可以看到,我值复制到另一个变量,它可以是有用的变量val可同时分配值,以RTB的文本改变。此外,我检查了其实际需要的调用,因为如果它已经在正确的线程上,则不必调用它。

+0

我得到了很多地区的错误。其实我不明白错误。 – rhsn

+0

@rhsn然后提供代码,在其中你得到的错误 - 否则我们不会能够帮助你 – MetaColon

+0

我写了那部分绘制图:'this.chart1.Series [“Datas”]。Points.AddXY(z,s);'但是我得到了那个错误:跨线程操作无效:控制'chart1'从其创建的线程以外的线程访问 – rhsn

相关问题