• 线程间操作无效: 从不是创建控件“”的线程访问它。


    线程间操作无效: 从不是创建控件“”的线程访问它。

    第一:
    Control.CheckForIllegalCrossThreadCalls = false;
    线程开始的时候加这么一句,OK,看不到错误了~
    啥都能用了~

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

     //建立个委托
    private delegate string returnStrDelegate();

    //搞个最简单滴取值滴方法~
    private string returnSchool()
            {
                return CB_School.SelectedValue.ToString();
            }

    //判断一下是不是该用Invoke滴~,不是就直接返回~
    private string returnCB(returnStrDelegate myDelegate)
            {
                if (this.InvokeRequired)
                {
                    return (string)this.Invoke(myDelegate);
                }
                else
                {
                    return myDelegate();
                }
            }

    //别的线程里的调用哇~
    string _school = returnCB(returnSchool);
    大概就是这样的,貌似有听说最好别用第一种方法,具体为啥我也不知道~
    反正我一直都用委托的,也不是很麻烦~

    麻烦知道的更清楚的人给说一声为什么,谢谢了~


    Feedback

    因为第一种方法只是简单的将错误提示禁用了,仍然存在跨线程调用控件的问题。为此可能造成两个线程同时或者循环改变该控件的状态导致线程死锁。
    Invoke方法是同步的方法,所以执行过程是有先后顺序的,所以就不会出现那个异常了

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaoyupeng/archive/2008/12/22/3582084.aspx

  • 相关阅读:
    204. 计数质数
    236. 二叉树的最近公共祖先
    优先队列和哈夫曼树
    185. 部门工资前三高的所有员工(求组内前几的值)
    部门工资最高的员工(求组内最大值)
    回调函数的案例
    单链表
    动态数组
    一致性哈希算法的基本原理
    只用2GB内存在20亿个整数中找到出现次数最多的数
  • 原文地址:https://www.cnblogs.com/luluping/p/1719152.html
Copyright © 2020-2023  润新知