我写了一个windows 应用程序,
当winform初始化以后,调用另外一个名空间的一个类的一个方法,
这个方法设置winform的一个Label的Text:
        private Control control=new Control();
        delegate void SetLabelCallback(string text);
#………………………………………………
        void Status(string _msg) {
            if (Form1.lb_status_obj.InvokeRequired == false)
            {
                Form1.lb_status_obj.Text = _msg;
            }
            else
            {
                SetLabelCallback sts = new SetLabelCallback(Status);
                try
                {
                    control.Invoke(sts, new object[] { _msg });
                }
                catch (Exception e)
                {
                    cc.write_str(e.Message);//将错误写入文本
                    MessageBox.Show(e.Message);
                    System.Environment.Exit(0);
                }                
            }
        }
错误是“Invoke or BeginInvoke cannot be called on a control until the window handle has been created.”,这个错误是个啥子意思?怎样解决。多线程访问winform真麻烦。

解决方案 »

  1.   

    Invoke or BeginInvoke cannot be called on a control until the window handle has been created.说明你的这个窗体还没有真正建立起来就是这样
      

  2.   

    ——“在创建窗口句柄之前,不能在控件上调用 Invoke 或 InvokeAsync”这个怎么解决哦,我尝试把Invoke写到form的onload事件中去,但是还是出现同样的错误
      

  3.   

    我找到解决办法之一:
     if (txt_obj.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(show_msg);
                    Form1.ActiveForm.BeginInvoke(d, new object[] { text, txt_obj });#这里,我的这个方法是静态的
                    //control.Invoke(d, new object[] { text, txt_obj });
                }
                else
                {
                    Form1.txt_obj.Text += text + "\r\n";
                }有其它办法吗?