應用程序的入口函數是main函數,在Console程序和Winform程序main函數都有清晰的定義,能夠很容易找到,可是WPF的工程文件中卻找不到main函數的定義,是WPF不須要main函數嗎?NO! NO! NO! 不要太天真了,WPF是有main函數的,VS幫咱們自動生成了,在obj\Debug\App.g.cs文件中能夠看到如下的定義(obj\Debug文件夾下還有一個叫App.g.i.cs的文件,文件內容與App.g.cs一致,這個文件也是自動生成的,是爲了VS的intelligence 智能感知服務的,關於intelligence 之後再講)。app
能夠看到Main函數在App類中定義,App類由VS自動生成,該類繼承自System.Windows.Application,Application類維護了應用程序的生命週期,每一個運行中的WPF程序都由Application的一個實例表示。以上代碼中關鍵的兩句是:函數
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);this
app.Run();orm
這兩句的做用是啓動應用程序,並將"MainWindow.xaml"定義的窗口做爲該應用程序的主窗口。自動生成的代碼比較簡單,Application類能夠作的事情遠不止這些,之後能夠詳細講一下。blog
以上是自動生成的Main函數,也能夠手動建立咱們本身的Main函數,以下:繼承
public class StartUp
{
[STAThread]
public static void Main(string[] args)
{
var app = new App
{
StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative)
};
app.Run();
}
}生命週期
可是你會獲得以下的編譯錯誤:ci
error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.string
緣由也很簡單,VS幫你生成了一個Main函數,你又本身定義了一個Main函數,可是應用程序只能有一個入口,系統不知道要用哪個了,因此須要手動指定一個。在工程的屬性的Application頁中,設置Startup object爲咱們剛剛定義的類StartUp就能夠了。it