首页
新闻
会员
周边
捐助
园子
·
关注
·
粉丝
·
会员
·
随便看看
·
消息
欢迎,请先
登录
或者
注册
。
登录
/
注册
闪存
博客
发言
小组
投递
新闻
提问
博问
添加
收藏
文库
问题反馈
问题列表
我关注的
我的博问
博问标签
.NET中非常奇怪的问题.
0
[已解决问题]
解决于 2008-04-09 13:41
<P>private void button1_Click(object sender, EventArgs e)<BR>{<BR>this.button1.Enabled = false;<BR>Form2 f = new Form2();<BR>Thread.Sleep(3000);<BR>f.Show();<BR>this.button1.Enabled = true;<BR>}<BR>以上为一个按钮的事件,当我点击的时候它会不可用,在不可用的时候,我再点击.事实上它也接受了事件,点击几次它会show几个窗口.也就是说即使是在不可能用的状态下它也会接受事件.不知道为什么?</P> <P> </P>
.NET技术
C#
侯垒
|
老鸟四级
|
园豆:
3435
提问于:2008-04-03 19:28
显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
<
>
分享
分享您的问题
最佳答案
0
窗口消息队列... Windows系统为每个UI线程(这里可以暂时简单理解为窗口)提供了一个(可以这么理解)队列,里边排着所有的输入消息.UI线程会不断地从这个队列里取消息,如果队列是空的,线程就会停下来等到下一个消息到达,如果不为空,就处理获取的消息. Thread.Sleep只会暂停你自己的线程,却没有暂停系统负责鼠标事件的线程,所以相应的点击消息就排在队列里,等你的线程醒了以后,于是就获取了以前未处理的消息.
deerchao
|
大侠五级
|
园豆:8367
|
2008-04-03 21:03
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
其他回答(3)
0
首先我不明白你为什么这么用,但是作为一个线程的问题,确是个Good question! 废话少说,先解决问题,你按下边的办法修改一下,肯定只出一个窗口,无论点几下。 private void button1_Click(object sender, EventArgs e) { this.button1.Enabled = false; Application.DoEvents(); Form2 f = new Form2(); Thread.Sleep(3000); Application.DoEvents(); f.Show(); this.button1.Enabled = true; } 这涉及到 缺省的窗口消息处理 和 程序主线程,我想你想一想就会明白的,如果需要进一步讨论,我们再论。
杨连国
|
园豆:295
(菜鸟二级)
|
2008-04-04 12:33
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
0
学习了,呵呵
volnet(可以叫我大V)
|
园豆:720
(小虾三级)
|
2008-04-06 04:16
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
0
虽然还是不知道你的真正目的,给你个办法让你曲线救国: private void button1_Click(object sender, EventArgs e) { if (this.button1.Enabled) { this.button1.Enabled=false; Form2 f = new Form2(); System.Threading.Thread.Sleep(3000); f.Show(); this.button1.Enabled = true; } }
风海迷沙
|
园豆:4453
(老鸟四级)
|
2008-04-07 10:13
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要
登录
以后才能回答,未注册用户请先
注册
。