C# 窗体程序加载&事件触发顺序

        很多人可能在前期开发窗体运用程序时,对窗体事件执行顺序都存在一些不明确的认识。在此,我个人总结一下自己的经验认识,如若存在误解的,欢迎指出讨论。

        通常,我们观察窗体加载时,我们也可以看出一些规律。比如一个窗体内容很多的窗体,我们会看到,窗体的边框会最先出现,但是里面的内容还在加载,如果说对控件有绑定值的操作,那种效果就会更加明显。这时,我们可能就会有先让窗体加载出来,再让他在慢慢的加载一些隐藏数据的想法。。。

        带着一些疑问,我们一起来看一下我接下来要说的内容吧。

        

        对于一个窗体程序,第一步,我们都知道,一定是执行Form()构造函数(含有InitializeComponent()方法的那个函数),初始化窗体,控件等内容,待内容初始完备后,将窗体Show()出来。

        这里需要注意的是,弹出窗体,我们有Show()和ShowDialog()两个方法可以用,通常情况下,我们一般都用Show()这个方法。其实具体要用哪一个方法,还是需要结合我们具体的需求。我们来看看Show()和ShowDialog()两个方法的主要区别在哪,最主要体现是后一个展示的窗体是独占的,如果打开了对应的窗体,不将其关掉,它便会独占主线程,使得不能在对系统的其他功能做操作,而前一个则不会有这样的影响。

       或许这时有人会以为 Show()方法执行之后,接下来应该是执行Shown()方法。这里要注意了,在Show()方法之后,主线程是会继续执行Load()事件,通常我们对窗体的初始化赋值,一般都是写在这个事件里面的,但是也有人会写在构造函数里。不过个人建议一下,对应一些控件层级的操作(给一个控件添加一个默认控件)等操作,可以写在构造函数里,其他的变量赋值等之类的操作,尽量都写在Load()事件里吧。

        Load()事件执行完成后,接下来便是执行Shown()方法,不过在窗体程序的编写中,很少用到这一个方法,可做一个了解,说不定哪天遇到某个需求,就需要用到这个方法才能有效的解决。值得注意的是,SizeChange()事件与它基本是属于同级的。所以触发Shown()与触发SizeChange()事件都是在Load()事件之后,但是不同的是,在主动改变窗体大小时,也会触发SizeChange()事件。

        而在窗体加载至完成,还有一个非常重要的一个事件,Activated()事件,他是在窗体激活时或产生操作(包括鼠标点击)时发生。因为这个事件是在窗体主线程执行完成后才会触发,所以在这里面的操作,是不会对窗体的加载造成影响的,要想加快窗体的加载速度,在这个事件里面动文章是一个不错的选择。不过如果想不到这个的事件,想要不影响窗体加载,提高窗体加载速度,还可以利用线程委托等来实现。其原理都是让主线程快速执行完成,不会被占用,这样窗体就不会停留在假死的状态中。

       

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琳妹妹的辉哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值