线程中(或由线程衍生的事件)操作可视化组件

         最近在写一个基于UDP协议的SmartPhone/PC结构的C/S软件,其中有一个功能将SmartPhone中的联系人读到PC端并在TreeView中显示。
         我采用的UDP模型就是我的另一篇文章《 .NET Compact Framework 1.x 下进行UDP通信  》 中描述的模型,就是在线程中进行监听,用事件抛出通信结果数据。那么,当我在UDP Server的事件中接受到联系人列表的时候,我实在在UDP Server 的OnReceiveBuffer事件中直接对TreeView进行操作时,问题就来了,我不能正确操作(不能添加任何Node)。
        起初,我以为是我操作TreeView的时候出错,所以把精力都放到TreeView的操作上,经过反复测试发现TreeView操作没有任何问题,并且在Form的Onload事件里,进行如下操作的时候,正确无误:
       TreeNode _treeNode;
       _treeNode = this.m_treeView.Nodes.Add("Test");
      但是在OnReceiveBuffer事件中进行以上操作的时候则不能正确添加Test Node,多次测试未果。我终于想到是线程问题,记得写Delphi程序的时候,线程中操作可视化组件需要同步处理,我想在.net中也是如此吧。找到问题的症结,就有针对性了,在MSDN上找到了处理办法,只要进行如下处理就可解决这个问题:
       //在线程中调用可视化组件
        delegate void SetTreeViewContactListCallback(string nodeText);
        private void SetTreeViewContactList(string nodeText)
        {
            if (this.m_treeViewContact.InvokeRequired)
            {
                SetTreeViewContactListCallback tcc = new SetTreeViewContactListCallback(SetTreeViewContactList);
                this.Invoke(tcc, new object[] { nodeText});
            }
            else
            {
                this.InitTreeViewContactList(nodeText);
            }
        }

        private void InitTreeViewContactList(string nodeText)
        {
            TreeNode _treeNode;
            _treeNode = this.m_treeViewContact.Nodes.Add(nodeText);
        }
        
        当OnReceiveBuffer事件抛出联系人数据的时候,调用SetTreeContactList函数就可安全正确的操作TreeView,将联系人写入TreeView。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值