通过本文主要向大家介绍了.net winform,iocomp net winform,vb.net winform,log4net winform,.net winform开发框架等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
写在前面:
从一个窗体的创建显示,再到与用户的交互,最后窗体关闭,这中间经历过了一系列复杂的过程,本文将从Winform应用程序中的Program.cs文件的第一行代码开始,逐步分析一个Winform应用程序到底是怎样从出生走向死亡,这其中包括Form.Show()和Form.ShowDialog()的区别、模式对话框形成的本质原因、消息循环、Windows事件与.net中事件(Event)的区别、System.Windows.Form.Application类的作用、以及我之前一篇博客中(.Net开发笔记(二)网址)面试题中的最后一题,从Windows消息层次讲述点击按钮弹出一个MessageBox的详细过程。
我承认,不了解以上问题的Coder可能也能写出非常出色非常复杂的Winform应用程序出来,但不是有句老话么,知其然,亦要知其所以然。
另外,看本篇博客(或者接下来几篇)必须了解Win32编程知识,如果不清楚的同学,可以先上网学习学习,这就像学习MFC最好也得懂点Win32编程,本文不解释什么是Win32 API、什么是句柄、更不会解释什么是回调方法。
一个引子:
一个线程,具体啥定义我也就不说了,太抽象,我觉得还是把它看做是一个方法(函数),当然包括方法体中调用的其它方法,线程有开始,也有结束,分别可以比作方法的开始和结束,我们不管一个方法体内调用了多少其它方法,只要程序没写错,这个方法肯定有返回的时候,也就是说,在正常情况下,一个线程开始后,肯定会有退出(结束)的时候,那么,如果想让一个线程不会太快结束,我们可以在方法体内写些啥?“阻塞方法!”有人可能马上说,因为阻塞方法一般不会马上返回,只有等它执行完毕后,才会返回,在它返回前,调用它的方法不会继续运行下去,的确,在我学习C++语言的时候,经常写Console程序(那时候也只会写这玩意儿),为了不让黑屏闪一下就消失了,看不到运行结果,我经常在程序最后加上一行“int a;cin>>a;”,我当时也不知道为啥要这样写,只知道这样写了,程序不会马上结束。其实后来才知道,那行代码就是阻塞了整个程序,当你输入一个整数,按下回车,程序就会结束。
“阻塞方法”确实是一种方法,但是如果我们想在线程执行过程中,与外部(用户)进行交互,也就是说,在线程执行期间,用户可以通过输入来控制线程的运行情况,同样在Console程序中,该怎么实现?现在问题来了,不紧不能让线程马上结束,还要与用户有所交互,而且不应该只交互一次(否则,上面提到的cin>>a;完全够用),该怎么搞?不止交互一次?那么很容易就能想到“循环”,用循环来使线程与用户进行交互再好不过了,为了与本文相联系,用C#代码编写如下:
G
从一个窗体的创建显示,再到与用户的交互,最后窗体关闭,这中间经历过了一系列复杂的过程,本文将从Winform应用程序中的Program.cs文件的第一行代码开始,逐步分析一个Winform应用程序到底是怎样从出生走向死亡,这其中包括Form.Show()和Form.ShowDialog()的区别、模式对话框形成的本质原因、消息循环、Windows事件与.net中事件(Event)的区别、System.Windows.Form.Application类的作用、以及我之前一篇博客中(.Net开发笔记(二)网址)面试题中的最后一题,从Windows消息层次讲述点击按钮弹出一个MessageBox的详细过程。
我承认,不了解以上问题的Coder可能也能写出非常出色非常复杂的Winform应用程序出来,但不是有句老话么,知其然,亦要知其所以然。
另外,看本篇博客(或者接下来几篇)必须了解Win32编程知识,如果不清楚的同学,可以先上网学习学习,这就像学习MFC最好也得懂点Win32编程,本文不解释什么是Win32 API、什么是句柄、更不会解释什么是回调方法。
一个引子:
一个线程,具体啥定义我也就不说了,太抽象,我觉得还是把它看做是一个方法(函数),当然包括方法体中调用的其它方法,线程有开始,也有结束,分别可以比作方法的开始和结束,我们不管一个方法体内调用了多少其它方法,只要程序没写错,这个方法肯定有返回的时候,也就是说,在正常情况下,一个线程开始后,肯定会有退出(结束)的时候,那么,如果想让一个线程不会太快结束,我们可以在方法体内写些啥?“阻塞方法!”有人可能马上说,因为阻塞方法一般不会马上返回,只有等它执行完毕后,才会返回,在它返回前,调用它的方法不会继续运行下去,的确,在我学习C++语言的时候,经常写Console程序(那时候也只会写这玩意儿),为了不让黑屏闪一下就消失了,看不到运行结果,我经常在程序最后加上一行“int a;cin>>a;”,我当时也不知道为啥要这样写,只知道这样写了,程序不会马上结束。其实后来才知道,那行代码就是阻塞了整个程序,当你输入一个整数,按下回车,程序就会结束。
“阻塞方法”确实是一种方法,但是如果我们想在线程执行过程中,与外部(用户)进行交互,也就是说,在线程执行期间,用户可以通过输入来控制线程的运行情况,同样在Console程序中,该怎么实现?现在问题来了,不紧不能让线程马上结束,还要与用户有所交互,而且不应该只交互一次(否则,上面提到的cin>>a;完全够用),该怎么搞?不止交互一次?那么很容易就能想到“循环”,用循环来使线程与用户进行交互再好不过了,为了与本文相联系,用C#代码编写如下:
G