解决方案 »

  1.   


      Thread thread = new Thread(new ThreadStart(dm)):    
      Thread.Start();void dm()
    {
      this.Invoke(new Action(delegate() {
       this.txtName.Enabled = true;
      }));
    }不如试试这个
      

  2.   


            private void SetStatus()
            {
                this.txtName.Invoke(new MethodInvoker(() => this.txtName.Enabled = true)); 
            }
      

  3.   


    试过了,可行,但是实际上我在SetStatus()方法内,操作的不止是一个控件,用这个方法就有点麻烦了...
      

  4.   

    在非UI线程中操作UI会报错,可使用Invoke
      

  5.   


    可是我代码里使用到委托并Invoke了啊,难道用法不对?
      

  6.   

    1.你代码编译不能通过
    2.IsHandleCreated 是什么意识你不知道
    3Control.Invoke(..);Control.BeginingInoke(..) 在什么情况下调用你不知道IsHandleCreated  是说你的窗体空间已经初始化了(被创建),防止在创建窗口之前调用invoke() private delegate void DelegateMethod();
            private void button1_Click(object sender, EventArgs e)
            {
       
                DelegateMethod dm = delegate()
                {               SetStatus();
                };
                if(!IsHandleCreated)
                {
                    this.textBox1.Invoke(dm);
                }
                this.textBox1.Invoke(dm);
                Thread thread = new Thread(new ThreadStart(dm));
                thread.Start();
            }
             private void SetStatus()
            {
                this.textBox1.Enabled = false;            //报错,从不是创建此控件的线程访问。
            }
      

  7.   

     private delegate void DelegateMethod();
            private void button1_Click(object sender, EventArgs e)
            {
       
                DelegateMethod dm = delegate()
                {               SetStatus();
                };
                if(IsHandleCreated)
                    this.textBox1.Invoke(dm);
                Thread thread = new Thread(new ThreadStart(dm));
                thread.Start();
            }
             private void SetStatus()
            {
                this.textBox1.Enabled = false;            //报错,从不是创建此控件的线程访问。
            }
      

  8.   


    1、你说我代码编译不能通过,可能是 thread.Start() 我写成了 Thread.Start()
    2、我看了你的代码,你Invoke了两次,这样好像不行吧,SetStatus()内的代码回执行两次...
      

  9.   


    1、你说我代码编译不能通过,可能是 thread.Start() 我写成了 Thread.Start()
    2、我看了你的代码,你Invoke了两次,这样好像不行吧,SetStatus()内的代码回执行两次...
    下面的个才是你没看到吗?
      

  10.   

    我是来挣分的(无奈我自己的分太少啊),代码如下:
    private delegate void DelegateMethod();
     
    private void SetStatus()
    {
        this.txtName.Enabled = true;            //报错,从不是创建此控件的线程访问。
    }
     
    public void btnStart_Click(object sender,EventArgs e)
    {
        DelegateMethod dm = new DelegateMethod(SetStatus);
        {
            SetStatus();
        };
         
        if(!IsHandleCreated)
        {
            this.txtName.Invoeke(dm);
        }    Thread thread = new Thread(new ThreadStart(dm));
        thread.Start();
     
    }
      

  11.   

        if(!IsHandleCreated) 改成    if(IsHandleCreated)
      

  12.   


    我写错了,应该是private delegate void DeleagetMethod();
      

  13.   


    我写错了,应该是:private delegate void DelegateMethod();
      

  14.   

      DelegateMethod dm = new DelegateMethod(SetStatus);
        {
            SetStatus();
        };
    这几句代码从字面上看,是相当于执行了两次SetStatus();,为什么要这么做呢?
      

  15.   

    我试过了刚刚,可行,但是我还是不太明白我写的代码究竟是什么原因才会报那个异常...你的这个代码就是没有执行 Invoke。
    private void SetStatus()
    {
        this.txtName.Enabled = true;            //报错,从不是创建此控件的线程访问。
    }
     
    public void btnStart_Click(object sender,EventArgs e)
    {
        DelegateMethod dm = delegate()
        {
            SetStatus();
        };
        Thread thread = new Thread(new ThreadStart(dm)):
        Thread.Start();
     }
     
      

  16.   


    你两个地方调用了它,第二次写错了。我就调用了一次呀
        
        if(!IsHandleCreated)
        {
            this.txtName.Invoeke(dm);
        }