A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 shangxin 于 2014-3-20 10:35 编辑

为什么一个线程中的不能为 另一个线程中控件的父类?该如何做呢?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

2 个回复

倒序浏览
的确会这样的,在某个线程中创建的控件不能以另一个线程中创建的控件作为parent,原先的设计就是这样的(即by   design的)。  

解决方法是用Control.Invoke。下面是一段例子代码:  

           
  1. private   void   menuItemFoo_Click(object   sender,   System.EventArgs   e)  
  2.             {  
  3.                         System.Threading.Thread   thread=new   System.Threading.Thread(new   System.Threading.ThreadStart(this.Foo));  
  4.                         thread.Start();  
  5.             }  

  6.             public   delegate   void   MyDelegate(Form   form);  
  7.             System.Windows.Forms.Form   childForm;  

  8.             private   void   AddMdiChild(Form   form)  
  9.             {  
  10.                         form.MdiParent=this;  
  11.                         form.Show();  
  12.             }  

  13.             private   void   Foo()  
  14.             {  
  15.                         childForm=new   Form();  
  16.                         //childForm.MdiParent=this;   //直接调用会出错  
  17.                         //childForm.Show();  
  18.                         this.Invoke(new   MyDelegate(this.AddMdiChild),new   object[]{childForm});  
  19.             }  
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
Thank You!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马