WPF一般默认提供一个MainWindow窗体,并在App.Xaml中使用StartupUri标记启动该窗体.以下通过手写实现WPF的启动.

首先先介绍一下VS默认提供的App.Xaml的结构,如下图:

主要包括App.Xaml文件以及App.Xaml.cs,以及App.g.i.s文件(在obj->Debug中可以看见该文件)

1.双击App.Xaml可以看见Xaml标记语言的信息,其中StartupUri="MainWindow.xaml"表示启动的窗体.

2.双击App.Xaml.cs看到的是继承于Application的一个App类,该类是空的.并且是部分类.

3.双击App下的InitializeComponent 或Main()时会跳转到App.g.i.s文件,同样InitializeComponent 或Main()也是在App的部分类中(同样可以看见partial关键字. public partial class App : Application).

4.以上均属于同一个类,即App.

5.右键项目选择属性,在启动对象中可以看见是未设置,如果点击下拉框会看见以上那个app类.

以上说明了VS提供的默认的模板,现在自己写代码实现WPF启动,为了说明WPF启动,首先创建一个项目,把以上文件都都删.

1.自己创建一个类,随便命名(app.cs),并且类名也叫app

2.添加继承,让app继承于Application,vs会自动提示添加system命名空间.

3.在app类中添加Main方法,该方法必须是公共,静态,无返回值.public static void Main(){}

4.在该方法上添加[STAThread]特性

5.在Main方法中,首先实例化该类,即:App app = new WpfApp1.App();

6.定义一个窗体,假设命名为win,这个窗体可以是该项目中的,也可以是引用项目的.有些公司有UI库,其中UI库中提供了自定义的Window,这时候就可以实例化一个自定义的Window.

7.app.run(win);

8.还记得右键项目->属性查看启动对象吗? 正如你现在所想,启动对象就可以选择为刚才自定义好的app.

9.F5启动,大功告成.

自己手写Main函数的好处:

1.简化了VS的模板,直接用代码启动,更好理解WPF启动流程.

2.如果使用自定义好的Window,则VS提供的模板没有任何用,自己写Main函数更清晰.

3.word等文档均可以实现双击打开文件,看起来挺帅.下面就自己实现这个帅动作.

3.1双击打开文件分为两个步骤:

window检测双击文件的操作,并指向默认(设置好的程序)程序,然后把文件路径以命令行的形式传给程序.

程序接收到该命令行,`获取到文件路径,然后编写代码解析文件,并进行下一步操作.

3.2实现第一步,第一步主要是window系统的事,与程序无关.可参照一下链接.该注册应该打包到软件包中.安装软件时就会自动进行注册.

https://blog.csdn.net/weixin_33834075/article/details/94325699 该注册自行验证.

后期也可以修改文件与程序的关联关系,参照以下链接:

https://jingyan.baidu.com/article/851fbc37d888553e1f15abb5.html

3.3第二步,程序部分的工作

app有一个事件Startup,在实例化app以后,给app添加Startup事件,app.Startup += App_Startup;;

private static void App_Startup(object sender, StartupEventArgs e)
{

}

该事件的StartupEventArgs 参数体用了传入程序中的参数.e.Args是一个数组,可以通过循环获取.

3.4现在理论上可以实现了,但开发过程中怎么测试呢? 为了测试进行注册等也太麻烦了吧

其实VS已经为我们提供了命令行传入的方式,右键项目->调试 启动选项中就可以看到命令行参数,在这里写上文件路径即可.如果想使用相对路径,那就再定义一下工作目录.

WPF启动流程-自己手写Main函数的更多相关文章

  1. 【C解毒】怎样写main()函数

    [C解毒]怎样写main()函数(出处: CUNIX论坛)

  2. 为什么c程序里一定要写main函数

    一. 学习过程 编写程序f.c: 对其进行编译,正常通过,再对其进行连接,出现错误: 显示的出错信息为: 翻译成中文是:在c0s模块没有定义符号’_main’. 那么这个错误信息可能与文件c0s.ob ...

  3. Python 为什么没有 main 函数?为什么我不推荐写 main 函数?

    毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提"Python 的 main 函数"."建议写 main 函数"-- 有些人 ...

  4. [置顶] Embedded Server:像写main函数一样写Web Server

    1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...

  5. 理解并手写 call() 函数

    手写自己的call,我们要先通过call的使用,了解都需要完成些什么功能? call()进行了调用,是个方法,已知是建立在原型上的,使用了多个参数(绑定的对象+传递的参数). 我们把手写的函数起名为m ...

  6. 手写bind函数

    实现bind函数 参考MDN提供的Polyfill方案 Function.prototype.myBind = function(context){ //这里对调用者做一个判断,如果不是函数类型,直接 ...

  7. C++之手写strlen函数

    代码: int strlen(const char *str){ assert(str!=NULL); intlen=; while((*str++)!='\0') len++; return len ...

  8. js面试题之手写节流函数和防抖函数

    函数节流:不断触发一个函数后,执行第一次,只有大于设定的执行周期后才会执行第二次 /* 节流函数:fn:要被节流的函数,delay:规定的时间 */ function throttle(fn,dela ...

  9. 理解并手写 bind() 函数

    有了对call().apply()的前提分析,相信bind()我们也可以手到擒来. 参考前两篇:'对call()函数的分析' 和 '对apply()函数的分析',我们可以先得到以下代码: Functi ...

随机推荐

  1. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  2. jmeter参数化之 【CSV Data Set Config/CSV数据配置文件】

    这里以登录功能为例: 1.新建.txt文件,将参数值写入到txt文件中(多个参数值如:用户名,密码 之间以逗号隔开),将文件放置在想要放置的目录下 2.添加csv数据文件设置 右键线程组->添加 ...

  3. lynx浏览器使用教程

    http://www.wocaoseo.com/thread-216-1-1.html LYNX浏览器是谷歌官方推荐的一款文本浏览器,主要用来模拟蜘蛛看到您页面时候的样子,谷歌在网站站长指南中提到: ...

  4. 关键词seo优化的核心和重点

    http://www.wocaoseo.com/thread-197-1-1.html        网站SEO优化是很多站长所必须要面对的问题,但是很多新手站长对关键词应如何选择,关键词要如何布局一 ...

  5. 揭秘!containerd 镜像文件丢失问题,竟是镜像生成惹得祸

    导语 作者李志宇,腾讯云后台开发工程师,日常负责集群节点和运行时相关的工作,熟悉 containerd.docker.runc 等运行时组件.近期在为某位客户提供技术支持过程中,遇到了 contain ...

  6. 极简 Node.js 入门 - 3.5 文件夹操作

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. A little something to get you started(Hacker101 CTF)

    打开题目的页面发现只有”Welcome to level 0. Enjoy your stay.“这么一行普通的文字,然后习惯性的打开浏览器的开发者工具的“network”模块,按下F5发现网页在请求 ...

  8. manualresetevent的用法学习

    ManualResetEvent 允许线程通过发信号互相通信. 通常,此通信涉及一个线程在其他线程进行之前必须完成的任务. 当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Re ...

  9. 【学习中】Fitness Schedule

    章节 内容 签到 第1周:步伐 √第1课(34分钟) 跑步1分钟 行走2分钟 共做8次 4月24日 √第2课(28分钟) 跑步1分钟 行走2分钟 共做6次 4月27日 √第3课(31分钟) 跑步1分钟 ...

  10. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...