求教 我是真不行了(在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。)

qq_34582920 2016-04-08 09:58:28
问题:在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

小弟目前正在做一个远程传输文件的软件,从网上找到一个组件,现在 我想在主窗体显示当前文件传输的状态

在主界面创建一个label 想通过text属性显示 ,然后我在主进程里定义委托


public void invokemsg(string value)
{
lab_msg.CreateControl();
Frm_main frmmain = new Frm_main();
frmmain.CreateControl();
frmmain.lab_msg.Invoke(statemsgcallback,value);

}
public void StateMsg(string value)
{
lab_msg.Text=value;
}


然后从传输子线程调用 就出现了 :在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
请问如何解决
...全文
93 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫0子K 2016-04-08
  • 打赏
  • 举报
回复
好奇怪的逻辑,好奇怪的代码~~~ 只针对你以上那段代码解决楼主提的问题:
public void invokemsg(string value)
        {
            lab_msg.CreateControl();
            Frm_main frmmain = new Frm_main();
            frmmain.CreateControl();
            frmmain.Load += (s1, e1) =>
            {
                frmmain.lab_msg.Invoke(statemsgcallback, value);
            };
        }
就这段代码即使被你调通了也会很奇怪吧。 先好好整理下你的逻辑先。 如果你有组件的代码。那应该是在组件里公布一个事件,主界面去注册这个事件,每次事件触发的时候再执行labelMsg.BeginInvoke。更新传输状态。

111,129

社区成员

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

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

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