winform 数据量不大但总是卡死

chenrong980 2013-04-24 01:54:36

我的界面是这样的,①里面是用户控件,特别是点击系统管理的时候最容易卡死(系统管理是Form窗体)其余大多数是用户控件。
主程序为
public FormMain()
{
InitializeComponent();
ThreadStart myTs = new ThreadStart(RSSMS);
Thread mytd = new Thread(myTs);
mytd.Start();

}
public void RSSMS()
{
while (true)
{
try
{
//读取短信
}catch
{
}
}
点击系统管理—>权限管理的代码是
if (checkchildFrmExist("权限管理") == true) { return; }
FormUserManage form1 = new FormUserManage();
form1.ShowDialog();
权限管理界面里的代码
public FormUserManage()
{
InitializeComponent();
sql = "select AreaID,DeviceDesc,DeviceID from RemoteDevices";
DataSet myds4 = dataBase.RunProcReturn(sql);
for (int f = 0; f < myds4.Tables[0].Rows.Count; f++)
{
CheckBox chkDevice = new CheckBox();
chkDevice.Name = "chkDesc" + myds4.Tables[0].Rows[f]["DeviceID"].ToString();
chkDevice.Text = myds4.Tables[0].Rows[f]["DeviceDesc"].ToString();
panelLiaoNing.Controls.Add(chkDevice);
}

}

点击【叹号】图标加载用户控件代码
try
{
if (((ToolStripButton)sender).Checked) return;
for (int i = 0; i < this.toolBar.Items.Count; i++)
{
if (toolBar.Items[i].GetType().Equals(typeof(ToolStripButton)))
{
if (toolBar.Items[i] != sender)
((ToolStripButton)toolBar.Items[i]).Checked = false;
else
((ToolStripButton)toolBar.Items[i]).Checked = true;

}
}
if (DisplayControl != null)
{
DisplayControl.Dispose();
}
DisplayControl = new ControlAlarmList();
DisplayControl.Parent = panelView;
DisplayControl.Dock = System.Windows.Forms.DockStyle.Fill;
((ControlAlarmList)DisplayControl).TargetID = TargetID;
((ControlAlarmList)DisplayControl).btnQuery_Click(sender, e);
selectMenu = "AlarmList";

}
catch
{
}
用户控件中更换列表中的红色和黄色图片
btnQuery_Click(object sender, EventArgs e)
{
if (dgvInfo.Rows.Count > 0)
{
//更新图片
for (int i = 0; i < dgvInfo.Rows.Count; i++)
{
string rank = dgvInfo["Rank", i].Value.ToString();
if (rank == "紧急")
dgvInfo["RankColor", i].Value = (Image)Properties.Resources.ResourceManager.GetObject("hong");
else
dgvInfo["RankColor", i].Value = (Image)Properties.Resources.ResourceManager.GetObject("huang");
}

}
}
...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Banianer 2013-04-24
  • 打赏
  • 举报
回复
sql = "select AreaID,DeviceDesc,DeviceID from RemoteDevices"; 你这样的语句,不卡才怪。 稍微仔细看了一下你右边的边界,滚动条已经变的很小。 说明数据条数已经挺多的了,但是你没有进行分页。 每一页若干条数据,等用到该页的时候才去请求。 不要把所有的数据一次性全部读出来。
md5e 2013-04-24
  • 打赏
  • 举报
回复
引用 2 楼 chenrong980 的回复:
引用 1 楼 liuchaolin 的回复: 用线程异步处理试试是在主窗体异步处理还是每个用户控件都要异步处理啊
用到数据加载的都进行异步处理
chenrong980 2013-04-24
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
用线程异步处理试试
是在主窗体异步处理还是每个用户控件都要异步处理啊
md5e 2013-04-24
  • 打赏
  • 举报
回复
用线程异步处理试试

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧