首页 > 程序开发 > 软件开发 > C# > 正文
C#子线程创建新窗体心得(对Windows窗体控件进行线程安全调用)
2014-02-26       个评论    来源:C#子线程创建新窗体心得(对Windows窗体控件进行线程安全调用)  
收藏    我要投稿

自己在写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线程来创建新窗口了。

另外还可参考MSDN文档:

http://msdn.microsoft.com/zh-cn/library/ms171728%28v=vs.80%29.aspx

点击复制链接 与好友分享!回本站首页
上一篇:C#编程总结(十三)数据压缩
下一篇:C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站