Winform程序 多线程显示不正常,并且不能操作

rickfoxjava 2014-08-23 04:12:51
我有一个winform窗体程序的查询功能
因为查询出来的数据很多,我希望能做到查询与显示异步
于是使用了Invoke

就是查询的时候,将查询到的数据放入一个自定义控件然后将它Add到主窗体的Controls里

可是虽然自定义控件显示出来了,但是那些自定义控件显示不正常,是空白的,而且整个窗体这时完全不能操作,下拉菜单都不能点击。

这种使用Invoke是不是不正确?应啊怎样使用才能让数据显示正常,并且能够操作??
...全文
422 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
健者天行 2014-08-24
  • 打赏
  • 举报
回复
如果是数据量太大,查询时就不要装载全部数据,分页。
  • 打赏
  • 举报
回复
引用 楼主 rickfoxjava 的回复:
我有一个winform窗体程序的查询功能 因为查询出来的数据很多,我希望能做到查询与显示异步 于是使用了Invoke 就是查询的时候,将查询到的数据放入一个自定义控件然后将它Add到主窗体的Controls里 可是虽然自定义控件显示出来了,但是那些自定义控件显示不正常,是空白的,而且整个窗体这时完全不能操作,下拉菜单都不能点击。 这种使用Invoke是不是不正确?应啊怎样使用才能让数据显示正常,并且能够操作??
用7、8行c#代码把你的程序主要逻辑写出来。
swslua 2014-08-24
  • 打赏
  • 举报
回复

private void Test2_Click(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(
() =>
{
this.Text = "11";
System.Threading.Thread.Sleep(2000);
this.Text = "22";
System.Threading.Thread.Sleep(2000);
this.Text = "33";
System.Threading.Thread.Sleep(2000);
this.Text = "44";
}
);
//t.IsBackground = true;
t.Start();
}
private void Test11_Click(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(
() =>
{
this.Text = "1";
System.Threading.Thread.Sleep(3000);
this.Text = "2";
System.Threading.Thread.Sleep(3000);
this.Text = "3";
System.Threading.Thread.Sleep(3000);
this.Text = "4";
}
);
//t.IsBackground = true;
t.Start();
}

每3秒改变窗口标题,其它按钮也能用
ima_zhan 2014-08-23
  • 打赏
  • 举报
回复
是不是控件显示逻辑的问题啊
rickfoxjava 2014-08-23
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
invoke也会占用主进程,如果里面操作耗时,就会卡
那么有什么办法可以解决这样的问题吗?
bdmh 2014-08-23
  • 打赏
  • 举报
回复
invoke也会占用主进程,如果里面操作耗时,就会卡
  • 打赏
  • 举报
回复
Invoke是跨线程访问控件时才用
  • 打赏
  • 举报
回复
Invoke是跨访问控件时才用, if(grid.InvokeRequired) { grid.Invoke(委托操作) } else { 直接操作 } 返回结果集比较大时,通常有两种做法,思路其实都是拆分 一种是改查询逻辑,分批返回(通常是异步查询,用回调add数据) 另一种将结果集拆分后添加

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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