在新开线程中使用对控件使用委托 会报错“控件线程不在当前线程中”,各位大神该如何解决呢? 分不多 见谅哈。

解决方案 »

  1.   

    定义一个delegate和一个private 方法,注意delegate和方法的参数一致,然后使用使用Invoke来更行控件。
      

  2.   

    调用Invoke方法,跨线程访问控件
      

  3.   

    http://www.cnblogs.com/mokey/articles/2095457.html
      

  4.   

    我具体步骤是这样的: 先
     Thread td =new Thread(new ThreadStart(xxx));
     td.isBackgroud=true;
     td.Start();
     然后在xxx方法中有调用了一个DataBind(DataTable table)方法,将数据绑定到控件上
    private delegate void DelegateDataBind(DataTable table);
    private  void DataBind(DataTable table)
    {
          if(InvokeRequired)
             {
                  DelegateDataBind del=new DelegateDataBind (DataBind);
                  this.Invoke(del,table)
             }
          else
            {  //绑定数据  }
    }
    之后就提示错误了 
      

  5.   

     this.Invoke(del,new object[]{table}) 
      

  6.   

       
    效果一样吧
     this.Invoke(del,table); 
      

  7.   

    http://blog.csdn.net/xianfajushi/article/details/7609849
    private void 时间_Tick(object sender, EventArgs e)
    {
    Thread 线程 = new Thread(delegate()
    {
    if (秒 < 59) 秒++; else { 秒 = 0; 分++; } if (分 == 60) { 分 = 0; 时++; } if (时 == 5) 时 = 0;/*这是个典型例子,这句非UI线程,下一句涉及UI线程转委托就OK*/
    this.Invoke(new Action(() =>
    显示时间.Text = DateTime.Parse(时.ToString("0:") + 分.ToString("00:") + 秒.ToString("00")).ToLongTimeString()));
    }); 线程.Start();
    }