Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

leinchu 2006-06-20 05:49:41
我写了一个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真麻烦。
...全文
1937 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leinchu 2006-06-21
  • 打赏
  • 举报
回复
我找到解决办法之一:
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";
}

有其它办法吗?
leinchu 2006-06-20
  • 打赏
  • 举报
回复
网上有文章说到了这个问题,但却没有明确说解决办法
leinchu 2006-06-20
  • 打赏
  • 举报
回复
——“在创建窗口句柄之前,不能在控件上调用 Invoke 或 InvokeAsync”

这个怎么解决哦,我尝试把Invoke写到form的onload事件中去,但是还是出现同样的错误
naijux 2006-06-20
  • 打赏
  • 举报
回复
“在一个窗体句柄创建前一个控件调用或者开始调用不能被调用”
英语不太好,编程更差,关注!
Reeezak 2006-06-20
  • 打赏
  • 举报
回复
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

说明你的这个窗体还没有真正建立起来就是这样

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧