无法修改WPF中Application的Main函数
今日企图重写Application中的Main函数,在App.xaml.cs中加入如下代码:
public class App : Application {
[STAThread] public static void Main() { WpfApplication.App app = new WpfApplication.App(); app.Run(); } } |
结果一直编译报错:
错误 10 类型“WpfApplication.App”已定义了一个名为“Main”的具有相同参数类型的成员 E:\Program\Code\ThesisProject\PFM\WpfApplication\obj\Debug\App.g.cs 59 28 WpfApplication |
发现原来是App.g.cs文件中已经定义了一个Main函数了,所以两个函数冲突了。xx.g.cs是编译器自动生成的一个文件,里面自动帮我们生成了一些模板代码,目的就是为了节省我们编写模板代码的时间。我企图直接把g.cs中的Main函数删掉(我知道这么做很天真),结果不出所料重新编译的时候这个文件又出现了。
Google之,有人说把partical去掉就行了(试过了,不行),没有找到具体的解决方案。于是我翻开了WPF Programming中的Application生命周期寻找答案。
结果终于被我找到了,还是要认真的看书才行啊!
大部分WPF应用程序在创建的时候就会为我们创建Main函数并调用Application实例的run函数,从而启动Application进程。这个Main函数就是g.cs中那个自动生成的Main函数。自动的Main函数如下:
/// <summary> /// Application Entry Point. /// </summary> [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] public static void Main() { WpfApplication.App app = new WpfApplication.App(); app.InitializeComponent(); app.Run(); } |
这个是由于App.xaml文件的属性中的生成操作(Build Action)所导致的。

你可以将生成操作选择到“无”,这样子你就可以自己写Main函数了!
且慢!但是为什么微软会自动的替我们生成Main函数呢?它不知道我们如果要改的话很麻烦么?其实它肯定是有原因的,WPF中Application的生命周期可以分为6个阶段:StartUp, Activated, Deactivated, DispatcherUnhandledException, SessionEnding, Exit。这幅图我觉得帮助很好的理解Application 的生命周期。

如图中所示,main函数中Run后就是StartUp了,我们不需要想学校里一样在main函数里加任何东西,可以根据需要在生命周期的不同阶段加入需要的代码,这样会让生命周期各个阶段的分工更加明确。
如果想要对Application深层次了解,可以去一下网址看看:
1. Programming WPF中对于这段的描述:http://goo.gl/mVGxj
2. WPF入门教程:理解Application对象:http://goo.gl/Uyaie
3. Google:http://goo.gl/oqyFw
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述