一个窗体,有个Button,想在新new线程执行的方法中访问这个Button,如何做?多给几种思路。

解决方案 »

  1.   

    if (button1.InvokeRequired)
        button1.Invoke(.....);
    else
       ........
      

  2.   

    good good study ,day day up
      

  3.   

    不可以, Control 只能被主线程访问, MSDN 已经说得很清楚了。
      

  4.   

    大家用过Timer吧 有没有谁知道Timer如何的实现的?
      

  5.   

    自写Timer已经可以实现Timer的功能,但就是无法访问主进程中的内容。
      

  6.   

    用一楼的 Invoke 异步委托时可以实现跨线程操作。:)
      

  7.   

    在你的窗口的构造函数中加上 窗口类名.CheckForIllegalCrossThreadCalls = false;之后可以在任何线程中访问窗口中的控件
      

  8.   

    不赞成这种做法,资源有时会等不到释放。做过一个邮件地址搜索的东西,这样写的,执行的时候内存狂涨。
     //建立个委托
    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);
      

  9.   

    其实就是想实现timer组建一样的功能,现在一些基本的东西差不多了,就是不能访问原始线程中的资源。