当前位置 博文首页 > 文章内容

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

    作者: 栏目:未分类 时间:2020-09-27 17:01:03

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



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