C#编写聊天程序的多线程问题 我用一个独立的线程处理socket的连接、接受与发送,但是这个线程不能修改窗口的控件,因为控件是主线程建立的,怎么解决?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大致思路是这样的,通过创建一个线程类去处理socket的连接、接受与发送. 所有要修改UI元素的行为都另外写方法,然后定义同签名的委托,然后使用 Control.Invoke() 方法来确保在UI线程修改UI元素例如添加一条信息public void AppendMessage(string message) { this.txtMessage.Text += "\r\n" + message; this.txtMessage.Select(this.txtMessage.Text.Length, 0); this.txtMessage.ScrollToCaret();}然后定义委托:public delegate void AppendMessageDelegate(string message);然后在线程中调用的时候:mainForm.Invoke(new AppendMessageDelegate(mainForm.AppendMessage), new object[] { "netmicro说: 这不就行了么" });-------一个更好的方法就是将Invoke也封装到UI里面,即public void AppendMessage(string message) { if (this.InvokeRequired) // 当前线程不是UI线程就会返回true this.Invoke(new AppendMessageDelegate(AppendMessage), new object[] { message }); else { this.txtMessage.Text += "\r\n" + message; this.txtMessage.Select(this.txtMessage.Text.Length, 0); this.txtMessage.ScrollToCaret(); }}这样,线程里就可以直接写mainForm.AppendMessage("netmicro说: 这不就行了么"); 可是还有一个问题,我在其他线程怎么得到窗口的实例名字?现在我按照netmicro的方法做了,这些都不是静态方法,C#里的窗口实例的名字是什么……? 公司上班不能用QQ和MSN,实在是无聊,就自己做了一个局域网的聊天工具。有兴趣的朋友可以试试看。不需要建立服务器!!!名称:EasyMessenger版本:2006 第2版主要功能介绍: 点对点私聊 多人群聊 自定义表情 发送网络图片 即时传送文件 历史记录保存有需要的朋友可以来信,可以自己定义需要的群组。下载页面:http://www.easymessenger.cn 其他类中调用webBrowser返回为空 怎么样动态绑定DataGridView 为什么格式字符串要这样写 C#临时数据问题 [提问]websdervice使用回调后出现的问题,比较诡异,忘达人赐教 这样的页面如何生成 打包N天还没搞定。。。。不爽。散分 是否有在PC上独立运行的智能机仿真器 DataGridViewButtonColumn中的对某行的一个单元格隐藏 求c#中string写入文件和从文件读出的方法 讨论下 怎么用C#做个qq聊天工具 用C#写的聊天程序,贴出所有的源代码,大家帮忙看看!
this.txtMessage.Text += "\r\n" + message;
this.txtMessage.Select(this.txtMessage.Text.Length, 0);
this.txtMessage.ScrollToCaret();
}然后定义委托:public delegate void AppendMessageDelegate(string message);然后在线程中调用的时候:mainForm.Invoke(new AppendMessageDelegate(mainForm.AppendMessage),
new object[] { "netmicro说: 这不就行了么" });-------一个更好的方法就是将Invoke也封装到UI里面,即public void AppendMessage(string message) {
if (this.InvokeRequired) // 当前线程不是UI线程就会返回true
this.Invoke(new AppendMessageDelegate(AppendMessage),
new object[] { message });
else {
this.txtMessage.Text += "\r\n" + message;
this.txtMessage.Select(this.txtMessage.Text.Length, 0);
this.txtMessage.ScrollToCaret();
}
}这样,线程里就可以直接写
mainForm.AppendMessage("netmicro说: 这不就行了么");
有兴趣的朋友可以试试看。不需要建立服务器!!!名称:EasyMessenger
版本:2006 第2版主要功能介绍:
点对点私聊
多人群聊
自定义表情
发送网络图片
即时传送文件
历史记录保存有需要的朋友可以来信,可以自己定义需要的群组。下载页面:
http://www.easymessenger.cn