zoukankan      html  css  js  c++  java
  • 线程间操作无效: 从不是创建控件“”的线程访问它。

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

    第一:
    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

  • 相关阅读:
    [leetcode]Set Matrix Zeroes
    [leetcode]Sort Colors
    [leetcode]Combinations
    [leetcode]Subsets
    [leetcode]Search a 2D Matrix
    [leetcode]Best Time to Buy and Sell Stock III
    [leetcode]Best Time to Buy and Sell Stock II
    [leetcode]Best Time to Buy and Sell Stock
    半平面交 (poj 1279(第一道半平面NlogN)完整注释 )
    hdu 4277 USACO ORZ (Dfs)
  • 原文地址:https://www.cnblogs.com/luluping/p/1719152.html
Copyright © 2011-2022 走看看