| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:结果与想象中不同!帮忙解释一下
只看楼主 加入收藏
lcf
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2004-10-10
收藏
 问题点数:0 回复次数:6 
结果与想象中不同!帮忙解释一下

//----------------------- //TwoPaintHandlers.cs一个窗口,两个paint方法 //------------------------- using System; using System.Windows.Forms; using System.Drawing; using System.Threading; class TwoPaintHandlers { public static void Main() { Form form =new Form(); form.Text ="Two Paint Handlers"; form.BackColor =Color.White; form.Paint +=new PaintEventHandler(PaintHandler1); form.Paint +=new PaintEventHandler(PaintHandler2); Application.Run(form); } static void PaintHandler1(object objSender,PaintEventArgs pea) { Form form=(Form)objSender; Graphics grfx=pea.Graphics; grfx.DrawString("First Paint Event Handler",form.Font,Brushes.Black,0,0); } static void PaintHandler2(object objSender,PaintEventArgs pea) { Thread.Sleep(2500); Form form=(Form)objSender; Graphics grfx=pea.Graphics; grfx.DrawString("Second Paint Event Handler",form.Font,Brushes.Black,0,100);         } }

想象中应该先出现First Paint Event Handler 等2.5秒后出现Second Paint Event Handler 但事实不是。为什么。请指教

搜索更多相关主题的帖子: 结果 想象 解释 
2005-03-17 21:37
lsj2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2004-11-25
收藏
得分:0 
把Thread.Sleep(2500);放到方法结束的位置,如下:

static void PaintHandler2(object objSender,PaintEventArgs pea)
 {
      Form form=(Form)objSender;
      Graphics grfx=pea.Graphics;
      grfx.DrawString("Second Paint Event Handler",form.Font,Brushes.Black,0,100);
  Thread.Sleep(2500);   
 }

兄弟一定跟我一样也在学习 《C# Windows 程序设计》 一书吧

我是初学者,有什么不周之处还望各位大虾指点一二。
2005-03-18 14:40
lcf
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2004-10-10
收藏
得分:0 
兄弟一定跟我一样也在学习 《C# Windows 程序设计》 一书吧!!!!
楼上兄弟真实聪明,我才刚开始学,翻译的很差呀,你觉得呢?
还有你说的方法我也想到了,试了也成功了,但是真的想不通呀,如果程序按语句顺序执行的话,那么第二个方法就是先
出现Second Paint Event Handler,然后再停2.5秒呀!。还是想不通。楼上兄弟帮忙解释一下好吗?
2005-03-18 20:58
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

我也搞不懂,想爆头了,谁来解决一下? 我再加一个PaintHandler3事件,发现Thread.Sleep延时阻止的只有前一个事件。 using System; using System.Windows.Forms; using System.Drawing; using System.Threading;

class TwoPaintHandlers : System.Windows.Forms.Form { public static void Main() { Form form = new Form(); form.StartPosition = FormStartPosition.CenterScreen; form.Text = "Two Paint Handlers"; form.BackColor = Color.White; form.Paint += new PaintEventHandler(PaintHandler1); form.Paint += new PaintEventHandler(PaintHandler2); form.Paint += new PaintEventHandler(PaintHandler3); Application.Run(form); } static void PaintHandler1(object objSender,PaintEventArgs pea) { Form form = (Form)objSender; Graphics grfx = pea.Graphics; grfx.DrawString("First Paint Event Handler",form.Font,Brushes.Black,0,0); } static void PaintHandler2(object objSender,PaintEventArgs pea) { //Thread.Sleep(2500); Form form = (Form)objSender; Graphics grfx = pea.Graphics; grfx.DrawString("Second Paint Event Handler",form.Font,Brushes.Black,0,100); //Thread.Sleep(2500); }

static void PaintHandler3(object objSender,PaintEventArgs pea) { Thread.Sleep(2500); Form form = (Form)objSender; Graphics grfx = pea.Graphics; grfx.DrawString("Third Paint Event Handler",form.Font,Brushes.Black,0,200); //Thread.Sleep(2500); } }

[此贴子已经被作者于2005-3-19 0:08:31编辑过]

2005-03-19 00:03
lsj2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2004-11-25
收藏
得分:0 
Thread.Sleep(2500);是让当前的线程暂停2。5秒,你的目的是让
grfx.DrawString("Second Paint Event Handler",form.Font,Brushes.Black,0,100);暂停2。5秒,
可是当程序执行到Thread.Sleep(2500);时,
grfx.DrawString("Second Paint Event Handler",form.Font,Brushes.Black,0,100);还没有执行,也就是说它并不是当前线程,当前线程是方法PaintHandler1中的;
grfx.DrawString("First Paint Event Handler",form.Font,Brushes.Black,0,0);
所以,显示窗体后的2。5秒后"First Paint Event Handle"和“Second Paint Event Handler"同时显示了出来。

我只是从程序的执行表面现象推断的,是不是正确我也不肯定。

我是初学者,有什么不周之处还望各位大虾指点一二。
2005-03-22 13:05
lsj2000
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2004-11-25
收藏
得分:0 
这本书的中文译本的确是翻译的很差,根本就不通顺,好象是照着英文的字面意思来翻译的。
就跟一个中文不很熟练的老外在咬着舌头讲中文一样 哈哈哈。
不过 书本身还是很不错的。涉及的问题大多是其他编书籍中没有提到的问题。

我是初学者,有什么不周之处还望各位大虾指点一二。
2005-03-22 13:12
拭去你的泪
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-3-21
收藏
得分:0 
偶是新来的,不太明白,以后请多指教

2005-03-22 20:50
快速回复:结果与想象中不同!帮忙解释一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020401 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved