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就可以了。

WPF点滴(1) Main 函数的更多相关文章
- 如何自定义WPF项目的Main函数
原文:如何自定义WPF项目的Main函数 与Winform项目不同,WPF项目的Main函数在项目生成的时候,系统自动在后台为我们生成.根据项目生成方式的不同,其文件位于obj/Debug/App.g ...
- WPF使用自定义Main函数
一.自定义Main函数 在WPF中,我们添加一个Program静态类,添加一个Main静态方法,需要注意的是该方法需要添加"STAThread",表示WPF程序需运行在单一线程单元 ...
- 如何为WPF添加Main()函数 程序入口点的修改
一般的.WPF的Main()函数是自动生成的,不过有时候我们需要为我们的应用程序传参.那么自动生成的Main()函数就不会满足我们的要求. 那么如何为WPF Application 设置Main()函 ...
- WPF应用程序启动的问题(自定义Main函数启动)
问题引入: 一般WPF创建之后可以直接运行并不需要编写Main函数指定入口,但是在开发的过程中会遇到一些情况需要自定义Main让WPF从指定的Main函数中进行启动,这样可能会更好控制一点.但是我们再 ...
- WPF 用Main函数方式启动程序
原文:WPF 用Main函数方式启动程序 WPF默认程序启动:新建project后自动生成的App.xaml中指定程序启动方式(StartupUri="MainWindow.xaml&quo ...
- WPF启动流程-自己手写Main函数
WPF一般默认提供一个MainWindow窗体,并在App.Xaml中使用StartupUri标记启动该窗体.以下通过手写实现WPF的启动. 首先先介绍一下VS默认提供的App.Xaml的结构,如下图 ...
- WPF点滴(2) 创建单实例应用程序
最近有同事问道在应用程序启动之后,再次双击应用程序,如何保证不再启动新的应用程序,而是弹出之前已经启动的进程,本质上这就是创建一个单实例的WPF应用程序.在VS的工程树中有一个App.xaml和App ...
- 【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件
IDA 常见操作 空格,切换反汇编视图 选择CALL或是跳转 进入函数内部或是跳转处 返回键 ESC daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb Idap64.exe 分析6 ...
- .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的.不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数. 你可能会觉得这样没有什么用, ...
随机推荐
- python之类之多继承
class A(object): def test_func(self): print("from A") class B(A): pass # def test_func(sel ...
- c语言定义函数指针和typedef简写
二种方法来定义函数指针 #include<stdio.h> #include<stdlib.h> #include<Windows.h> int add(int a ...
- PHP+Gtk实例(求24点)
作者: Laruence( ) 本文地址: http://www.laruence.com/2009/05/26/871.html 转载请注明出处 最近要安排我为BIT提供的<PHP高级应用 ...
- java文件读写操作指定编码格式
读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,R ...
- [freeCodeCamp] Start a Nodejs Server - Complete "Make it Modular"
_/home/ubuntu/.nvm/versions/node/v4.4.5/lib/node_modules/learnyounode/exer cises/make_it_modular/sol ...
- springmvc 测试项目示例
新建一个 maven项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- crontab误删除
命令如下: cat /var/log/cron* | grep -i "`which cron`" > ./all_temp cat ./all_temp | grep -v ...
- 项目管理心得:一个项目经理的个人体会、经验总结(zz)
本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜.因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳 的就是完美主义倾向,尤其是做技术人员出身的,喜欢寻找标准答案 ...
- Navicat for oracle cannot load OCI DLL
Navicat for oracle 提示 cannot load OCI DLL87,126,193 instant client package is required for basic and ...
- IntelliJ IDEA 2017版 编译器使用学习笔记(二) (图文详尽版);IDE快捷键使用
补充介绍IntellJ 介绍主菜单功能及相关用途: File -------------> 对文件进行操作 Edit ------------> 对文本进行操作 View -------- ...