winform ui多线程

lifesoftware 2010-03-19 09:07:08
现在要做一个winform程序,界面控件非常多,而且连接数据库,连接flash,还有webBrowser,我想让这些 方面都能多线程去执行, 肯定会遇到UI线程问题。。

1.比如,我点击一个按钮,然后dataGridView显示对应的数据信息: 查询数据库 能开辟线程吗? 显示到dataGridView能单独开辟线程吗? 据我所知要用到委托调用 主线程 来修改 控件信息。

2.控件webBrowser在加载网页的时候,鼠标是cursor 是读取样子,是不能进行 其他操作。只有等加载完网页才能执行其他操作,这个怎么给它开辟线程。。


3.winform 程序 设计 多线程思想 还望 大家给点。 回答的好加分,在这先谢了。
...全文
242 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoganghan 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wanghehacker 的回复:]
C# code


先在窗体的按钮事件里边,启动一个线程
Threat = new threat(new threatstart(要在线程里边执行的函数名,或者是对象.方法));//括号里边的函数名不能包含(),不能带参数
t.Isbackground=true;
t.start

public void weituo()
{

private Label _label;……
[/Quote]

纠错喽:Threat 应为thread
lifesoftware 2010-03-24
  • 打赏
  • 举报
回复
楼上说的对一般控件的更新 还行,对webbrowser 不行。
hbbliyong 2010-03-19
  • 打赏
  • 举报
回复
帮你顶起
lexfu 2010-03-19
  • 打赏
  • 举报
回复
凡是涉及到耗时时间长,导致UI失去响应的操作LZ都可以采用多线程的方式。不过要考虑如果需要实时显示操作过程和信息的话就要使用委托和回调的方式调用新线程
清风六月 2010-03-19
  • 打赏
  • 举报
回复
你去看看BackGroundWorker吧,估计这个东西对你是有用的.
爱如少年 2010-03-19
  • 打赏
  • 举报
回复
我的代码别直接复制啊,我都是用手敲的,没区分大小写,不是在IDE里边写的
爱如少年 2010-03-19
  • 打赏
  • 举报
回复

先在窗体的按钮事件里边,启动一个线程
Threat = new threat(new threatstart(要在线程里边执行的函数名,或者是对象.方法));//括号里边的函数名不能包含(),不能带参数
t.Isbackground=true;
t.start

public void weituo()
{

private Label _label; //如果控件名字作为参数,最好有一个静态的对象来接收它
private delegate void dd();//声明委托
dd a =delegate()
{
_label.text = "委托"
};
_label.Invoke(a);//执行委托
}





如果你要在线程里调用的函数,有参数怎么办
那好,先建一个类,然后把这个函数放类里边,去掉参数
然后定义一个类的对象,初始化,传参数进去,就OK了
写线程调用的时候 就是 对象.方法 就可以不用参数了



完毕
mayonglong 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianhongmu 的回复:]
你去看看BackGroundWorker吧,估计这个东西对你是有用的.
[/Quote]

这个其实很有用~
xian_wwq 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianhongmu 的回复:]
你去看看BackGroundWorker吧,估计这个东西对你是有用的.
[/Quote]
如果对委托不熟悉,还是用这个比较简单

111,098

社区成员

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

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

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