日期:2014-05-20  浏览次数:20759 次

请求赐教:初学C#的两个问题
1.有一段代码,需要它在窗体和窗体上的控件显示后执行,应该把它放在哪里呢?
1)如把它放在构造函数里,执行时窗体还未显示;
2)如把它放在Form_Load事件里,执行时窗体还是没有显示;
3)如把它放在Form_Shown事件里,执行时窗体虽显示了,但窗体上的控件仍未显示。

2.有一段代码,它根据执行状态相应修改窗体上已显示的label控件:
                ///   > >   正在检测网络连接...
                ///         正在连接网络...
                ///         网络已连接,请进行登录验证:
                ///label_04.Text= "> > "
                ///label_05.Text= "正在检测网络连接... "
                ///label_06.Text= "正在连接网络... "
                ///label_07.Text= "网络已连接,请进行登录验证: "
                private   void   TestAndLinkNetwork()
                {
                        //延时,以后将放置网络硬件测试代码;
                        for   (ulong   i   =   0;   i   <   399999999;   i++)   ;  
                       
                        //label控件属性第一次改变;
                        label_05.Enabled   =   false;
                        label_04.Top   +=   16;
                        label_06.Enabled   =   true;

                        //延时,以后将放置网络连按代码;
                        for   (ulong   i   =   0;   i   <   399999999;   i++)   ;
                       
                        //label控件属性第二次改变;
                        label_06.Enabled   =   false;
                        label_04.Top   +=   16;
                        label_07.Enabled   =   true;
                }
实际执行时,不论延时长短,窗体上总是直按显示label控件属性第二次改变后的结果,而label控件属性第一次改变的结果总是不能被正确显示出来。即使在每次属性改变后加label.Show也无济于事。
小弟初学,敬请赐教,不胜感谢!

------解决方案--------------------
for (ulong i = 0; i < 399999999; i++) ;

这种延时可不好,对C#来说,我可能在几毫秒就执行完了,你可以用Thread的Sleep()来试试
------解决方案--------------------
或者用mutex中的waitOne( 1000 )来试试
------解决方案--------------------
在C#里面:

for (ulong i = 0; i < 399999999; i++) ;

这种循环会被“优化”,即便 i < long.maxvalue 也就是眨眼的事情。
------解决方案--------------------
第一个问题: