Chinaunix首页 | 论坛 | 博客
  • 博客访问: 757915
  • 博文数量: 96
  • 博客积分: 2023
  • 博客等级: 上尉
  • 技术积分: 1738
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-15 10:03
文章分类

全部博文(96)

文章存档

2014年(11)

2012年(85)

分类: 嵌入式

2012-05-25 16:01:21

程间操作无效: 从不是创建控件“”的线程访问它。
听说2003里边不会,我不知道是不是这样的,反正一直都在用05~
05里会出这个问题的,貌似是为了安全~
哦,现在知道的解决方法有两个~

第一:

点击(此处)折叠或打开

  1. Control.CheckForIllegalCrossThreadCalls = false;

线程开始的时候加这么一句,OK,看不到错误了

第二:
用委托,在05里,每个控件都有个InvokeRequired的属性
判断一下是不是true,是的话进行Invoke操作的,完事了

点击(此处)折叠或打开

  1. //建立个委托

  2. private delegate string returnStrDelegate();

  3. //搞个最简单滴取值滴方法~

  4. private string returnSchool()
  5.         {
  6.             return CB_School.SelectedValue.ToString();
  7.         }

  8. //判断一下是不是该用Invoke滴~,不是就直接返回~

  9. private string returnCB(returnStrDelegate myDelegate)
  10.         {
  11.             if (this.InvokeRequired)
  12.             {
  13.                 return (string)this.Invoke(myDelegate);
  14.             }
  15.             else
  16.             {
  17.                 return myDelegate();
  18.             }
  19.         }

  20. //别的线程里的调用哇~

  21. string _school = returnCB(returnSchool);
大概就是这样的,貌似有听说最好别用第一种方法,具体为啥我也不知道。麻烦知道的更清楚的人给说一声为什么,谢谢了。
阅读(4111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~