线程间操作无效 从不是创建控件“___”的线程访问它”解决方法的疑惑
2010-09-11 20:45
447 查看
解决方法根据网友的资料一般提到了两种,但msdn的帮助提到了三种,有一种但我怎么验证也不行。先说一下经常讨论的两种: (1)不使用委托:在构造函数或者窗体Load的代码里添加下面一句: Control.CheckForIllegalCrossThreadCalls = False (2)委托方法的实现 private delegate void TestDelegate(); private void DelegateMethod(){ ////label...... } private void StartMethod(){ this.Invoke(new TestDelegate(DelegateMethod)) } private button_click(...){ Thread thread = new Thread(new ThreadStart(StartMethod)); thread.Start(); } 这两种方法都没有问题,但是msdn还有一种即说用backgroundworker组件,这种方法那个例子没问题。 但是在下面这种情况就出问题了: 我通过串口(serialport)接收数据然后更新文本框,利用backgroundworker实现不成功。 描述一下我的程序, 在界面上放个textbox1,serialport1,backgroundworker1,button1, 然后在串口的datarecived中 Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ass1 = Me.SerialPort1.ReadLine() 'ass1为全局变量,接收串口数据,此步没问题 Me.BackgroundWorker1.RunWorkerAsync() '根据msdn我用BackgroundWorker1在textbox1完成显示 End Sub '在 BackgroundWorker1_RunWorkerCompleted中 Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted TextBox1.Text = "This text was set safely by BackgroundWorker." '在textbox1中显示接收数据 End Sub 在执行到 TextBox1.Text = "This text was set safely by BackgroundWorker." 时提示“线程间操作无效 从不是创建控件“Textbox1”的线程访问它”。说明BackgroundWorker组件不能实现跨线程访问。 但是在msdn例子里把 Me.BackgroundWorker1.RunWorkerAsync() 放在一个button的click中却可以正确运行,不提示跨线程访问问题。 是不是BackgroundWorker组件不能避免类似上面描述的串口多线程访问的错误??那BackgroundWorker组件其实用在何种场合??
相关文章推荐
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- [转]线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- C# 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~ 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~【转】
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“...”的线程访问它(解决方法)
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法!
- 线程间操作无效: 从不是创建控件“pbarc”的线程访问它 解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 关于线程间操作无效: 从不是创建控件“xx”的线程访问它,错误解决方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 线程间操作无效: 从不是创建控件“”的线程访问它的解决方法
- c# 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。解决方法