线程中(或由线程衍生的事件)操作可视化组件
来源:互联网 发布:地瓜网络嗅探器下载 编辑:程序博客网 时间:2024/05/13 00:55
最近在写一个基于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。
- 线程中(或由线程衍生的事件)操作可视化组件
- 线程的内存可视化
- 禁止在窗口界面线程中进行线程同步或进行耗时的操作。。。
- MFC 线程在WinApp衍生类中启动流程
- Java中线程的操作
- 关于Linux线程id衍生出的讨论
- 多线程程序中线程安全的操纵可视化控件
- Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)
- 详解Java多线程编程中线程的启动、中断或终止操作
- 由后台线程创建的线程也是后台线程
- 调用SwingUtilities.invokeLater()将更新UI的操作放到事件派发线程中执行
- C#在一个线程中操作另一个线程的控件
- 在一个线程中操作窗体线程的控件
- MFC中线程操作
- C#的线程中如何操作控件?
- 线程函数中操作DC的注意事项
- 线程中操作窗体上的控件
- java中线程的基本操作!
- 关于调试
- 三层交换机不能完全取代路由
- 二层、三层、四层交换机的区别详解
- WINX可视化开发工具的初步设想
- IT考试认证站点
- 线程中(或由线程衍生的事件)操作可视化组件
- SAP CRM项目手记(6)
- 图片按钮,使用get方法提交数据时遇到的严重问题!
- 致CSDN的一封信
- displayTag学习摘要
- 记者暗访揭开手机维修黑洞
- 使用了CHtmlView后的COleException异常(zz)
- 一种适合32位机器数的确定性素数判定法(原创论文)
- 用VC++处理多个采集线程需注意的地方