C#子线程创建新窗体

自己在写socket通讯碰到这样的问题:

除主UI线程外,有一个后台socket监听线程一直在监听新消息,新消息到来后,右下角弹出一个新窗口提醒用户。

如果用监听线程创建并弹出窗体的话,由于监听线程一直处于阻塞监听状态,没功夫处理UI方面的东西,所以新弹出的窗口会卡死在那里。

解决方法:

应该在主UI线程上创建窗体,通过主线程里面的一个窗体或控件调用Invoke()方法,让创建和显示窗体的代码在主UI线程上执行,

 //定义一个委托  MessageEntity是消息实体类
 delegate void ShowMessageCallback(MessageEntity message);

 //委托方法
 private void ShowMessageSmall(MessageEntity message)
 {         

   //右下角消息框Form
   MessageSmall ms = new MessageSmall(message);             
   ms.Show();          
  }

 //调用委托
  private void show(MessageEntity message)
  {
    //创建委托
    ShowMessageCallback wt = new ShowMessageCallback(ShowMessageSmall);
    //这段代码在主窗体类里面写着,this指主窗体
    this.Invoke(wt, new Object[] { message });
  }

监听线程监听到有消息过来后,只需要调用show方法,传一个消息实体进去就可以通过主UI线程来创建新窗口了。

转载文章:https://blog.csdn.net/li34442779/article/details/19924523

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值