WPF中没有Main()?

Jui*_*ice 117 c# wpf program-entry-point c#-4.0

在编程时我是初学者,但我确信其中一个通用规则是程序以Main()开头.我在创建WPF项目时没有看到一个.Main()只是在WPF中以不同的方式命名?

And*_*ler 118

Main()方法是自动创建的.如果您想提供自己的(在VS2013和VS2017中测试):

  • 右键单击解决方案资源管理器中的App.xaml,选择"属性"
  • 将"构建操作"更改为"页面"(初始值为"ApplicationDefinition")

然后只需向App.xaml.cs添加一个Main()方法.它可能是这样的:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}
Run Code Online (Sandbox Code Playgroud)

  • 构建动作提示是关键,谢谢 (12认同)
  • 真棒!应该是公认的答案. (5认同)
  • [STAThread] 为您的应用程序设置 COM 线程模型。通常,您只需将其设置为 STA,而不必担心它究竟做了什么。如果您有兴趣,请查看 https://msdn.microsoft.com/de-de/library/system.stathreadattribute(v=vs.110).aspx (3认同)
  • @AndreasKahler 是的,有一个解决方案可以将 Program.cs 作为 WPF 应用程序中的启动对象。1. 添加 `Program.cs` 类 2. 将此答案中的代码添加到 `Program.cs` 3. 在项目属性中,选择 `ProjectName.Program` 作为 `Startup object` (3认同)
  • 不要这样做!这将永久破坏整个项目设计器中样式中 App.xaml 中定义的 StaticResources。 (2认同)
  • 尝试单击“构建操作”中的“页面”后 App.xaml 消失 (2认同)

Mar*_*ell 71

它是在构建期间生成的,但您可以自己提供(根据需要在项目属性中消除歧义).在obj/debug中查找app文件; 我(由"C#2010 Express"提供)App.g.i.cs:

namespace WpfApplication1 {


    /// <summary>
    /// App
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class App : System.Windows.Application {

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {

            #line 4 "..\..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            #line default
            #line hidden
        }

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

  • 或者,在 Visual Studio 中打开“App.xaml.cs”。使用导航栏 &gt; 方法下拉列表 &gt; 选择“Main”(变灰)。这会将您带到“App.gics”。 (2认同)

Fra*_*nov 13

Main() 由CLR和WPF自动提供.

C#编译器采用命令行开关/m,它指定包含实现的类型Main().按照惯例,如果没有显式指定启动对象,CLR将查找具有静态Main()方法并将调用它的任何类.(正如@Marc Gravel在评论中指出的那样)

对于WPF,在构建Main()时自动生成,App.xaml并指定/ m开关以使C#编译器将该类用作入口点.但是,如果您查看项目属性,您会发现有一个设置供您选择启动对象.因此,如果您愿意,您可以提供自己的实现类Main().

请注意,这将使您负责创建Application实例并调用其Run()方法以确保正确启动WPF基础结构.

  • 要迂腐:说'main()`是由CLR(运行时)提供的并不是真的准确,它实际上是生成它的编译器. (2认同)

Vla*_*lad 6

Main()在编译期间生成.你可以在App.g.cs(在obj/{Debug,Release}文件夹中)找到它.


Ann*_*ath 6

main()是应用程序的标准入口点,但所有应用程序都是以这种方式构建的.在XAML项目中,App.XAML文件指定它所指的入口点StartupUri="MainWindow.xaml".

正如其他人所说,实际的主要功能是根据项目中XAML文件的内容生成的.