C# 如何用线程来加载界面

sagitta1130 2008-12-03 09:32:42
各位好:
用C#做软件界面时,由于采用的是通过WebService从服务器SQL数据库里取数据来填充界面,我想可不可以用线程一边加载数据,一边用线唾来加载界面,如何用线程来加载界面?
谢谢!
...全文
299 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liningln0 2008-12-03
  • 打赏
  • 举报
回复
各位好:
用C#做软件界面时,由于采用的是通过WebService从服务器SQL数据库里取数据来填充界面,我想可不可以用线程一边加载数据,一边用线唾来加载界面,如何用线程来加载界面?
谢谢!
[Quote=引用 11 楼 sagitta1130 的回复:]
5楼和7楼的方法我都试了,5楼的可以,能明显的感觉到界面加载快了一些,但是唯一不足的就是,这个方法只有在数据加载完之后再显示界面,7楼的方法可以解决5楼的不足,但不足的是提示:

难道非得要用委托?
各位前辈还有方法吗?
[/Quote]

如果想要开辟一个新的线程,但不用委托是很难的吧...因为线程的参数就必须是方法地址(也就是方法名),所以不用委托不是很现实.
jshailin 2008-12-03
  • 打赏
  • 举报
回复
同意7楼的
mochencui 2008-12-03
  • 打赏
  • 举报
回复
七楼的兄弟的回答还是不错的
sagitta1130 2008-12-03
  • 打赏
  • 举报
回复
5楼和7楼的方法我都试了,5楼的可以,能明显的感觉到界面加载快了一些,但是唯一不足的就是,这个方法只有在数据加载完之后再显示界面,7楼的方法可以解决5楼的不足,但不足的是提示:

难道非得要用委托?
各位前辈还有方法吗?
sagitta1130 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 justindreams 的回复:]
不要一边取数一边加载,这样可能会出现不同是加载的情况。
我给你另一种思路:(要使用XML)
登录的时候,从数据库中取出界面要加载的内容,将必要信息,写入xml放入本地,在某些位置做标志,这个标志是检查界面是否需要变化的,如果需要变化,重新写xml文件
然后,加载界面通过xml来加载
只需要通过标志检查是否界面有变化,有变化以后才需要改界面,并且,使用本地xml来加载,速度上应该比你的方式要快
[/Quote]
你这种方法听说过,一直没用过!
每次登陆时,还是要从数据库读取信息来生成XML文件,这好你与线程来加载应该区别不大吧,在时间消耗上!
justindreams 2008-12-03
  • 打赏
  • 举报
回复
不要一边取数一边加载,这样可能会出现不同是加载的情况。
我给你另一种思路:(要使用XML)
登录的时候,从数据库中取出界面要加载的内容,将必要信息,写入xml放入本地,在某些位置做标志,这个标志是检查界面是否需要变化的,如果需要变化,重新写xml文件
然后,加载界面通过xml来加载
只需要通过标志检查是否界面有变化,有变化以后才需要改界面,并且,使用本地xml来加载,速度上应该比你的方式要快
i0876 2008-12-03
  • 打赏
  • 举报
回复
学习了。
liningln0 2008-12-03
  • 打赏
  • 举报
回复
public Form1()
{
InitializeComponent(); //先加载界面,以免给用户有等待的感觉.觉得速度不行.
new System.Threading.Thread(new System.Threading.ThreadStart(DB操作)).Start();
}

DB操作()
{

}

因为数据可能是加载到界面的某些地方,所以建议不同时启用两个线程,一个加载界面,一个加载数据,这样很容易出现冲突(而且很难解决),如果数据不是加载到当前这个界面,那么5楼的方法可以用.但是建议做点修改.先把截面的框架加载好,然后再加载数据.这样不会给用户长时间等待.在用户看到界面的时候再去开辟线程.
justseven 2008-12-03
  • 打赏
  • 举报
回复
接分,走人
jinsuo_1986 2008-12-03
  • 打赏
  • 举报
回复
public Form1()
{
new System.Threading.Thread(new System.Threading.ThreadStart(DB操作)).Start();
InitializeComponent();
}

DB操作()
{

}
killer_liqiao 2008-12-03
  • 打赏
  • 举报
回复
up
sagitta1130 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 siemems 的回复:]
可以先加载界面,然后再加载数据
[/Quote]

你能不能说的详细点,我想知道线程到底是怎样加载界面的,你能不能写个示例程序?谢谢!
卧_槽 2008-12-03
  • 打赏
  • 举报
回复
开个后台线程就是了,很难么?
siemems 2008-12-03
  • 打赏
  • 举报
回复
可以先加载界面,然后再加载数据
Deathsign 2008-12-03
  • 打赏
  • 举报
回复
你添加一个进度条就行啦……
多线程操作控件是老方法了
Contral.Invoke这个 查查MSDN……上面的例子很详细
jinsuo_1986 2008-12-03
  • 打赏
  • 举报
回复
其实可以这样:加进度条
进度条显示的同时,对DB操作
完事后显示你的界面

111,131

社区成员

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

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

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