在BackGroundWorker的DoWork事件中添加了一个方法 方法里面有一个添加生成控件
panDaily.Controls.Add(picture);
panDaily.Controls.Add(label);
结果就报错了 应该是控件在UI线程上吧提示错误“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级。”
怎么解决百度上找跨线程都乱七八糟的

解决方案 »

  1.   

    你应该这样做:1:public delegate void PanDailyAddControlsHandler(Control ctrl);
    2:定义一个 该代理的变量
    private PanDailyAddControlsHandler addControlHandler = null;
    3:定义一个方法
    private void OnAddControlHandler(Control ctrl)
    {
         if (this.InvokeRequired)
         {
             this.BeginInvoke(addControlHandler , ctrl);
         }
         else
         {
             panDaily.Controls.Add(ctrl);    
         }
    }
    4:实例化你的handle:在构造函数中
    addControlHandler = new PanDailyAddControlsHandler(OnAddControlHandler);5:在你的DoWork函数中 使用方法
    OnAddControlHandler(picture);
    OnAddControlHandler(label);
      

  2.   


                    panDaily.BeginInvoke((Action)delegate() 
                    {
                        panDaily.Controls.Add(picture);
                        panDaily.Controls.Add(label);
                    });