warewing
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 41 文章- 1 评论- 1
关于线程修改控件的一些事
从网上搜集来的!哈哈哈
private
void
button1_Click(
object
sender, System.EventArgs e)
{
new
Thread(
new
ThreadStart(ThreadProc)).Start();
}
private
void
ThreadProc()
{
this
.progressBar1.Maximum
=
100
;
while
(
this
.progressBar1.Value
<
this
.progressBar1.Maximum)
{
this
.progressBar1.Value
+=
1
;
System.Threading.Thread.Sleep(
500
);
}
}
上面的代码虽然能正常工作,但是违反了一个规则。
Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。Control.InvokeRequired属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。控件上有四种方法可以安全地从任何线程进行调用:Invoke、BeginInvoke、EndInvoke 和 CreateGraphics。对于所有其他方法调用,当从另一个线程进行调用时,应使用这些 Invoke 方法之一。(摘自SDK帮助)
修改为:
private
delegate
void
ChangeProgressHandler(
int
max,
int
value);
private
void
button1_Click(
object
sender, System.EventArgs e)
{
new
Thread(
new
ThreadStart(ThreadProc)).Start();
}
private
void
ThreadProc()
{
int
i
=
0
;
while
(
++
i
<
100
)
{
this
.Invoke(
new
ChangeProgressHandler(ChangeProgress),
new
object
[]
{
100
, i}
);
System.Threading.Thread.Sleep(
500
);
}
}
private
void
ChangeProgress(
int
max,
int
value)
{
if
(
this
.Tag
==
null
)
{
MessageBox.Show(
this
.InvokeRequired.ToString());
this
.Tag
=
1
;
}
this
.progressBar1.Maximum
=
max;
this
.progressBar1.Value
=
value;
}
哈哈,这样就能“安全”的修改和调用控件啦!就是invoke方法
posted @ 2008-05-28 14:50
wuhang
阅读(31)
评论(0)
编辑
收藏
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
关于IE问题,请教和求救
关于Ballance游戏修改
继续说那点破事
asp.net控件开发基础(1)
“图片变幻显示控件”发布
关于ADO.Net连接池(Connection Pool)的一些个人见解
相关链接:
最新IT新闻:
Google推出Android Market挑战App Store
美国年轻人最喜欢的15大网站
2008年8月30日IT博客精选
《极品飞车12》最新真人照片、游戏截图
IBM正在开发超强性能4TB固态硬盘阵列
博客园新闻频道
博客园首页
社区
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我的标签
[新闻](1)
随笔档案
2008年6月 (3)
2008年5月 (20)
2008年4月 (2)
2008年3月 (11)
2008年2月 (4)
最新评论
阅读排行榜
1. [转载来的]C# API 大全 (124)
2. 使用Webparts前需要注意的事情(70)
3. 任何一个使用.NET的人(转载)(60)
4. GridView操作小技巧-自定义删除按钮(57)
5. 转载来的WinForm多线程编程篇(38)
评论排行榜
1. 热烈庆祝本人开博啦~!2008,狠狠的一博(1)
2. 任何一个使用.NET的人(转载)(0)
3. [转载]两个常用的SQL语句(0)
4. 【转载】一些面试题的回答二 (0)
5. 学习笔记-"WCF课程笔记1"(0)