wpf应用程序在启动的时候会自动创建Main函数并调用Application实例的run(),从而启动Application进程。Main函数在一个App.g.cs文件中,App.g.cs文件的位置在\obj\x86\Debug\App.g.cs。自动生成的Main函数如下:

        /// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main() {
WpfApp1031.App app = new WpfApp1031.App();
app.InitializeComponent();
app.Run();
}

如果我们想在Main函数中获取参数或做一些用户验证,就可以在此修改Main函数,但是你会发现项目关闭再重新启动的时候,App.g.cs会重新生成,所以我们必须放弃在App.g.cs文件中修改Main函数。解决方案如下:

第一步:打开App.xaml文件的“属性”窗口,修改生成操作:ApplicationDefinition 为Page。

第一步:我们可以在App.xaml.cs中重新写Main函数,启动主窗口的方法有三种,方法1比较常见。代码如下:

public partial class App : Application
{
[STAThread]
static void Main(string[] args)
{
//用户验证操作Start
//......
//用户验证操作Start //方法1
Application app = new Application();
Window1 win1 = new Window1();
app.Run(win1); //方法2
//Application app = new Application();
//Window1 win1 = new Window1();
//app.MainWindow = win1;
//win1.Show();
//app.Run(); //方法3
//Application app = new Application();
//app.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
//app.Run();
}
}

第三步:修改项目的启动对象为App类,默认(未设置)

重新生成就可以了。

  各个Buid Action之间的区别 (生成操作的各个选项目前还不太明白,等以后慢慢了解吧!)

  * None: 此文件不参与编译也不被输出。比如:工程中的文档文件, readme.txt。

  * Compile: 参与编译并输出。主要是代码文件。

  * Content: 不参与编译,但会被输出。

  * Embedded Resource: 此文件被嵌入到主工程生成的DLL或exe中。主要是资源文件。

  * ApplicationDefinition: 和Page类似,但只用于Silverlight的启动页面(默认是App.xaml)。

  * Page: Silverligh中所有的usercontrol/page/childwindow xaml都属于"Page” build,其它的build action不能将code behind文件和xaml文件连接起来。

  * CodeAnalysisDictionary: 自定义的CodeAnalysis字典。

  * Resource:embeds the file in a shared (by all files in the assembly with similar setting) assembly manifest resource named AppName.g.resources

  * SplashScreen: Silverlight的欢迎界面。

  * DesignData: Sample data types will be created as faux types. Use this Build Action when the sample data types are not creatable or have read-only properties that you want to defined sample data values for.

  * DesignDataWithDesignTimeCreatableTypes: Sample data types will be created using the types defined in the sample data file. Use this Build Action when the sample data types are creatable using their default empty constructor.

  * EntityDeploy: 适用于Entity框架。

经过尝试,我们也可是自己重新创建一个program类来写Main函数,然后修改项目的启动对象为program类,代码如下:

public class program : Application
{
[STAThread]
static void Main()
{
//用户验证操作Start
//......
//用户验证操作Start //方法1
Application app = new Application();
Window1 win1 = new Window1();
app.Run(win1); //方法2
//Application app = new Application();
//Window1 win1 = new Window1();
//app.MainWindow = win1;
//win1.Show();
//app.Run(); //方法3
//Application app = new Application();
//app.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
//app.Run();
}
}

【WPF】Application应用程序启动的更多相关文章

  1. WPF获取应用程序启动目录的方法

    1.AppDomain.CurrentDomain.BaseDirectory using System; namespace ConsoleApplication1 { class Program ...

  2. WPF 10天修炼 第三天- Application全局应用程序类

    Application对象 当一个WPF应用程序启动时,首先会实例化一个全局唯一的Application对象,类似于WinForm下的Application类,用于控制整个应用程序,该类将用于追踪应用 ...

  3. WPF Application 类介绍以及怎样修改启动方式

    因为想要修改wpf的启动方式,所以研究了下Application类,现把一些有用的属性与大家分享下: 属性: Current                  获取当前 AppDomain的 Appl ...

  4. WPF 开发自动开机启动程序

    原文:WPF 开发自动开机启动程序 本文告诉大家如何在 WPF 开发一个可以自动启动的程序 本文使用的自动开机启动方法是通过快捷方式放在启动文件夹的方式. 创建快捷方式 /// <summary ...

  5. wpf 程序启动显示图片

    一.设置图片的生成操作 程序启动时会出现0.5秒的图片显示,再显示程序界面. 二.写代码实现相同效果 /// <summary> /// App.xaml 的交互逻辑 /// </s ...

  6. C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式

    C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...

  7. 关于WPF程序启动性能

    项目里WPF的启动时间太久(>1分钟),显然是不能接受的.超过10秒,连Loading的等待框都会让用户感到厌烦. 1. 症状 项目的结构是1个WPF主进程,启动3个WPF子进程.子进程在启动时 ...

  8. Merging a WPF application into a single EXE(WPF应用程序合并成单个Exe文件)

    I always dislike handing off little applications to people. Not because I can’t, but because of the ...

  9. Application全局应用程序类

    当一个WPF应用程序启动时,先会实例化一个全局的唯一的Application.如果开发人员熟悉Windows Form编程,会知道在SystemWindowsForm命名空间中有一个Applicati ...

随机推荐

  1. Android Studio 复制粘贴图片到drawable文件夹没有效果 - 解决方法

    我想放一些图片到drawable文件夹里面,但是简单的复制文件,粘贴文件,或者拖拽文件,都不起作用.不知道为什么,之前是可以的,突然就不行了. 解决方案 在drawable文件夹的目录上右键,选择Re ...

  2. Eclipse+Axis自动生成Web Service WSDL文件

    JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) 首先创建一个web工程,创建过程如下: 如果选择Apache Tomcat v5.5, ...

  3. Adobe Edge Animate –弹性的方块-使用tweenmax缓动效果

    Adobe Edge Animate –弹性的方块-使用tweenmax缓动效果 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 此前有Edge爱好者提出一 ...

  4. Vim编辑器的常用快捷键.

    Linux中的文本操作离不开Vim编辑器的使用. Vim编辑器的使用相对门槛较高.需要挺长一段时间的适应. 总结一些Vim使用过程中常用的命令(这些命令基本上都是在vim的命令模式下使用) 1.跳转到 ...

  5. 【分割圆】Uva 10213 - How Many Pieces of Land ?

    一个椭圆上有N个点,将这n个点两两相连,问最多能将这个椭圆分成多少片. 理清思路,慢慢推. 首先我们要想到欧拉公式:V+E-F=2 其中V为图上的顶点数,E为边数,F为平面数. 计算时的可以枚举点,从 ...

  6. Groovy选型

    Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代 ...

  7. 【改进】用Log4net建立日志记录

    上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...

  8. Tomcat - 持久化 Session

    Session 是保存在内存中的,如果服务器重启.宕机的话,Session 就会丢失.有时候,我们需要对 Session 持久化以应对意外的情况发生.例如,客户端与服务器在交互过程中,可能因为 Ses ...

  9. Spring(3.2.3) - Beans(8): 基于 Annotation 的配置

    除了基于 XML 的配置外,Spring 也支持基于 Annotation 的配置.Spring 提供以下介个 Annotation 来标注 Spring Bean: @Component:标注一个普 ...

  10. python的全局变量玩法还挺特别的

    global g_arr def add(): #global g_arr g_arr = [] g_arr.append(1) add() print g_arr #你将收获一个NameError错 ...