WPF点滴(1) Main 函数

应用程序的入口函数是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 以后再讲)。

可以看到Main函数在App类中定义,App类由VS自动生成,该类继承自System.Windows.Application,Application类维护了应用程序的生命周期,每个运行中的WPF程序都由Application的一个实例表示。以上代码中关键的两句是:

this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

app.Run();

这两句的作用是启动应用程序,并将"MainWindow.xaml"定义的窗口作为该应用程序的主窗口。自动生成的代码比较简单,Application类可以做的事情远不止这些,以后可以详细讲一下。

 

以上是自动生成的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();
  }
}

但是你会得到如下的编译错误:

error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.

原因也很简单,VS帮你生成了一个Main函数,你又自己定义了一个Main函数,但是应用程序只能有一个入口,系统不知道要用哪一个了,所以需要手动指定一个。在工程的属性的Application页中,设置Startup object为我们刚刚定义的类StartUp就可以了。

 

posted @ 2018-03-06 23:27 TigerLu 阅读(...) 评论(...) 编辑 收藏