一、自定义Main函数

在WPF中,我们添加一个Program静态类,添加一个Main静态方法,需要注意的是该方法需要添加“STAThread”,表示WPF程序需运行在单一线程单元下。具体如下:

    static class Program
{
[STAThread]
static void Main()
{
Console.WriteLine("自定义Main函数");
new MainWindow().ShowDialog();
}
}

上述的Main并没有调用App类,若需要使用App类,那么自定义Main函数内容如下:

        static void Main()
{
Console.WriteLine("自定义Main函数");
new MainWindow().Show();
new App().Run();
}

二、编译自定义Main函数

此时,编译代码,报错“程序定义了多个入口点。使用/main(指定包含入口点的类型)进行编译”。此时,我们需要更改应用程序的启动对象为我们自定义的对象,具体如下:

再次编译即可完成。

三、程序原先的Main在哪

在以上示例中,我们比较好奇程序原先的Main函数在哪?在代码完全没有搜索到,我们使用ildasm.exe查看IL代码查看,发现App类确实有Main函数。具体如下:

打开Main方法查看代码,我们发现该代码是程序编译时生成的,具体如下:

.method public hidebysig static void  Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [System]System.CodeDom.Compiler.GeneratedCodeAttribute::.ctor(string,
string) = ( 01 00 16 50 72 65 73 65 6E 74 61 74 69 6F 6E 42 // ...PresentationB
75 69 6C 64 54 61 73 6B 73 07 34 2E 30 2E 30 2E // uildTasks.4.0.0.
30 00 00 ) // 0..
// 代码大小 22 (0x16)
.maxstack 1
.locals init ([0] class chapter01.App app)
IL_0000: nop
IL_0001: newobj instance void chapter01.App::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: callvirt instance void chapter01.App::InitializeComponent()
IL_000d: nop
IL_000e: ldloc.0
IL_000f: callvirt instance int32 [PresentationFramework]System.Windows.Application::Run()
IL_0014: pop
IL_0015: ret
} // end of method App::Main

我们打开程序obj/Debug下面的App.g.cs,可以找到Main函数,具体如下:

WPF使用自定义Main函数的更多相关文章

  1. WPF应用程序启动的问题(自定义Main函数启动)

    问题引入: 一般WPF创建之后可以直接运行并不需要编写Main函数指定入口,但是在开发的过程中会遇到一些情况需要自定义Main让WPF从指定的Main函数中进行启动,这样可能会更好控制一点.但是我们再 ...

  2. 如何自定义WPF项目的Main函数

    原文:如何自定义WPF项目的Main函数 与Winform项目不同,WPF项目的Main函数在项目生成的时候,系统自动在后台为我们生成.根据项目生成方式的不同,其文件位于obj/Debug/App.g ...

  3. WPF自定义Main函数

    第一步:在app.xaml.cs里加入以下代码: [STAThread] public static void Main(string[] args) { App app = new App(); a ...

  4. 如何为WPF添加Main()函数 程序入口点的修改

    一般的.WPF的Main()函数是自动生成的,不过有时候我们需要为我们的应用程序传参.那么自动生成的Main()函数就不会满足我们的要求. 那么如何为WPF Application 设置Main()函 ...

  5. WPF点滴(1) Main 函数

    应用程序的入口函数是main函数,在Console程序和Winform程序main函数都有清晰的定义,可以很容易找到,但是WPF的工程文件中却找不到main函数的定义,是WPF不需要main函数吗?N ...

  6. WPF启动流程-自己手写Main函数

    WPF一般默认提供一个MainWindow窗体,并在App.Xaml中使用StartupUri标记启动该窗体.以下通过手写实现WPF的启动. 首先先介绍一下VS默认提供的App.Xaml的结构,如下图 ...

  7. WPF 用Main函数方式启动程序

    原文:WPF 用Main函数方式启动程序 WPF默认程序启动:新建project后自动生成的App.xaml中指定程序启动方式(StartupUri="MainWindow.xaml&quo ...

  8. eclipse的maven项目,如何使用java run main函数

    项目使用maven管理,一般说来就使用jetty:run了.但是对于做功能测试和集成测试的用例,需要使用自定义的quickrun来运行进行测试环境的参数设定和功能隔离,google一番发现maven有 ...

  9. main函数的简介

    ////  main函数的简介.h//  IOS笔记////  Created by .//  Copyright © 2015年  All rights reserved.// //#import ...

随机推荐

  1. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...

  2. python 序列与字典

    序列概念: 序列的成员有序排列,可以通过下标访问到一个或几个元素,就类似与c语言的数组. 序列的通用的操作: 1:索引 11 = [1,2,3,4] 11[0] = 1 2:切片 11[1,2,3,4 ...

  3. Distributed | Paxos

    自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性.Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题.在学习了Raft算法之后自然不 ...

  4. Bounding Volume Hierarchies 加速结构

    背景   光线与物体求交是光线追踪的主要时间瓶颈.   如果不进行优化,则对每条光线,我们都需要遍历场景中的全部物体并求交.而现在想建模一个小物体的表面,往往要几千甚至几万个三角形,一个商业级产品,屏 ...

  5. 配置动态刷新RefreshScope注解使用局限性(一)

    在 Spring Cloud 体系的项目中,配置中心主要用于提供分布式的配置管理,其中有一个重要的注解:@RefreshScope,如果代码中需要动态刷新配置,在需要的类上加上该注解就行.本文分享一下 ...

  6. (二十)VMware Harbor - API

    可以用swagger在线解析 http://editor.swagger.io/将swagger.yaml中的内容拷贝到里面即可. 官方文档说明链接如下:https://github.com/vmwa ...

  7. 我最近做了一个react的后台管理系统,用于快速创建后台项目模板

    react-ant-admin 此框架使用与二次开发,前端框架使用react,UI框架使用ant-design,全局数据状态管理使用redux,ajax使用库为axios.用于快速搭建中后台页面.欢迎 ...

  8. Day05_20_Java中类的创建和对象的实例化

    类的创建和对象的实例化 类的定义 类属于引用数据类型,java语言中所有的.class都属于引用数据类型 在类体当中,方法体之外定义的变量被称为 成员变量,成员变量没有赋值,系统默认是0: 语法结构: ...

  9. Spring Boot 轻量替代框架 Solon 1.3.29 发布

    Solon 是一个微型的Java开发框架.项目2018年启动,参考过大量前人作品:内核0.1m的身材,超高的跑分,以及良好的使用体验.支持:RPC.REST API.MVC.WebSocket.Soc ...

  10. 【MQ中间件】RabbitMQ -- RabbitMQ死信队列及内存监控(4)

    1.RabbitMQ TTL及死信队列 1.1.TTL概述 过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取:过了之后消息将自动被删除.RabbitMQ可以对消息和队列设 ...