定义一个方法用来创建 Button:
public Button CreateButton(string buttonText, eventHandler clickHandler)
{
   Button btn = new Button();
   btn.Text = buttonText;
   btn.Click += clickHandler;
   this.panel1.Controls.Add(btn);
   return btn;
}private delegate Button OneDelgate(string buttonText, eventHandler clickHandler);
Button btn;
if (this.InvokeRequired)  
// this 是指 panel1 所属的父控件,可能是窗体,也可能是其他控件。
{
OneDelegate watcherHandler = new OneDelegate(CreateButton);
object[] paras = new object[2];
paras[0]= "Button1";
         paras[1]= new EventHandler(...);
  btn = this.Invoke(watcherHandler, paras);
}
else
{
     btn = this.CreateButton("Button1", new EventHandler(...));
}以上代码,仅作原理性参考。
根据实际需要,自行修改。

解决方案 »

  1.   

    恩,有点眉目了,用托管,这个东东我都还不知道用来干什么的,看来c#还是和java有不同的.我的在这里花点时间了.谢谢大哥.看看其他的人还有什么意见..
      

  2.   

    可以加限定,先完成A线程内创建panel1,再执行B,不然会有冲突。可以设定A的优先级最高
    B的执行条件是在panel1已经存在的基础上的
      

  3.   

    是啊,panel1在执行之前就存在了.而且我也把B设置为后台运行.A优先级是最高的
      

  4.   

    不用不知道,一用吓一跳,阿扁兄果然高明.现在能正常显示控件了.呵呵.不过我用的是自定义控件,因为这个自定义控件的一个事件我在自定义控件.cs里定义了.所以到外面不好  new EventHandler(...))了,故你的那个事件句柄的创建我就不要了.
           嘿嘿,说老实话,我把你上面的那段代码拷贝过去,然后自己改了下.但是机制还是不清楚,不知道它为什么要这样做.所以最后还要麻烦各位告诉我关于这个的系统介绍.我在网上查了,tmd全是些东东西西的.