的确会这样的,在某个线程中创建的控件不能以另一个线程中创建的控件作为parent,原先的设计就是这样的(即by design的)。
解决方法是用Control.Invoke。下面是一段例子代码:
- private void menuItemFoo_Click(object sender, System.EventArgs e)
- {
- System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(this.Foo));
- thread.Start();
- }
- public delegate void MyDelegate(Form form);
- System.Windows.Forms.Form childForm;
- private void AddMdiChild(Form form)
- {
- form.MdiParent=this;
- form.Show();
- }
- private void Foo()
- {
- childForm=new Form();
- //childForm.MdiParent=this; //直接调用会出错
- //childForm.Show();
- this.Invoke(new MyDelegate(this.AddMdiChild),new object[]{childForm});
- }
复制代码 |