我想在richtextBox中看到它们之后,我从串口读取数据。但是我得到了那个错误。请帮忙。 跨线程操作无效:从其创建线程以外的线程访问控件'richTextBox1'。在c#
-2
A
回答
0
您不能从除主线程以外的任何线程中更改UI组件。
尝试以下操作:
richTextBox1.Invoke(new Action(() => { richTextBox1.Text = val.ToString(); }));
调用导致要在UI线程中运行指定的动作。
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的文本改变。此外,我检查了其实际需要的调用,因为如果它已经在正确的线程上,则不必调用它。
相关问题
- 1. “跨线程操作无效:从其创建线程以外的线程访问的控件。”
- 2. 跨线程操作无效:从其创建的线程以外的线程访问控制'chart1'
- 3. 跨线程操作无效:从其创建的线程以外的线程访问控制'Form1'
- 4. 跨线程操作无效:从其创建的线程以外的线程访问控制'Form2'
- 5. 跨线程操作无效:从其创建线程以外的其他线程访问
- 6. 从线程以外的线程访问跨线程操作
- 7. VB.NET [跨线程操作无效:控制'txtIncomingText'从线程访问........]
- 8. c# - 进度条[线程]跨线程操作无效:从其创建的线程以外的线程访问控制'progressBar'
- 9. 从C#中创建的线程以外的其他线程访问控制器
- 10. 从其他线程获取listboxitems:跨线程操作无效
- 11. 如何解决这个问题==跨线程操作无效:控制'frm_proc'从其创建的线程以外的线程访问
- 12. 跨线程操作无效
- 13. 跨线程操作无效
- 14. 跨线程操作无效
- 15. 跨线程操作无效
- 16. 跨线程操作无效
- 17. 跨线程操作无效
- 18. 跨线程操作无效:
- 19. vb.net线程进度条 - 线程操作无效:从其创建的线程以外的线程访问的控制'ProgressBar1'
- 20. c#显示线程无效的跨线程访问问题
- 21. c# - 跨线程操作无效ListView
- 22. C#Console.SetOut跨线程操作无效
- 23. C#跨线程操作无效
- 24. 线程安全问题:跨线程操作无效
- 25. C#中的线程异常错误:跨线程操作无效:通过跨线程操作访问的控制'lblp4'无效
- 26. C#跨线程操作无效,2个控制和2级独立的线程
- 27. 如何纠正“从其创建线程以外的线程访问”的错误?
- 28. 无效的跨线程访问问题
- 29. 了解跨线程控件访问C#
- 30. C# - 跨线程操作 - 在线程创建控制,添加到主窗体
我得到了和图表相同的错误:( – rhsn
@rhsn然后你必须对图表做相同的处理(你必须调用它),否则,考虑为图表提供代码 – MetaColon
@rhsn如果你有同样的错误,那么它应该是相当明显的是什么是需要修复它。 –