C# 多线程处理问题
时间:2011-12-21
来源:互联网
我现在的程序是这样的:我的程序中主程序处理线程中处理各种消息,并在主界面中显示。现在是使用的一个委托代码如下:
//更新系统消息
private delegate void FlushForm(string message);
private void flushForm(string message)
{
if (this.lb_Message.InvokeRequired || this.Lb_Count.InvokeRequired)
{
FlushForm i = new FlushForm(flushForm);
this.Invoke(i, message);
}
else
{
try
{
if (this.lb_Message.Items.Count > 500)
this.lb_Message.Items.Clear();
if (!String.IsNullOrEmpty(message))
lb_Message.Items.Add(message);
this.lb_Message.SelectedIndex = this.lb_Message.Items.Count - 1;
this.Lb_Count.Text = "当前连接用户:" + this.smp.loginUsers.Count.ToString();
}
catch { }
}
}
但是这样做似乎有点问题是,消息太多,而且电脑处理速度慢时就会在显示消息时卡住主线程,从而卡死了消息处理操作。
现在我想这样,用一个单独的线程显示消息在主界面上,但是我在逻辑处理上就有点不清楚了(我才学C#一个月很多都还不清楚),要是在每个显示消息的地方创建一个线程显示消息就会存在显示完了之后不知道怎么结束线程的处理,而且这样做也不好,大量消息来的时候一次性就要创建大量的线程。所以希望各位帮我理一理逻辑上的思路,给些参考,谢谢大家
//更新系统消息
private delegate void FlushForm(string message);
private void flushForm(string message)
{
if (this.lb_Message.InvokeRequired || this.Lb_Count.InvokeRequired)
{
FlushForm i = new FlushForm(flushForm);
this.Invoke(i, message);
}
else
{
try
{
if (this.lb_Message.Items.Count > 500)
this.lb_Message.Items.Clear();
if (!String.IsNullOrEmpty(message))
lb_Message.Items.Add(message);
this.lb_Message.SelectedIndex = this.lb_Message.Items.Count - 1;
this.Lb_Count.Text = "当前连接用户:" + this.smp.loginUsers.Count.ToString();
}
catch { }
}
}
但是这样做似乎有点问题是,消息太多,而且电脑处理速度慢时就会在显示消息时卡住主线程,从而卡死了消息处理操作。
现在我想这样,用一个单独的线程显示消息在主界面上,但是我在逻辑处理上就有点不清楚了(我才学C#一个月很多都还不清楚),要是在每个显示消息的地方创建一个线程显示消息就会存在显示完了之后不知道怎么结束线程的处理,而且这样做也不好,大量消息来的时候一次性就要创建大量的线程。所以希望各位帮我理一理逻辑上的思路,给些参考,谢谢大家
作者: blwuer 发布时间: 2011-12-21
作者: hefeng_aspnet 发布时间: 2011-12-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28