Main
方法是C#控制台应用程序的入口点。因此,例如,如果我必须启动某些线程或服务,我将在Main
方法中执行此操作。
我没有在WPF项目中看到Main
方法,那么WPF应用程序的入口点是什么?如果我必须启动一些线程或服务,应该在哪里编写启动它们的代码?
更新: this answer总结了可用的解决方案,但每个解决方案的优缺点是什么?
答案 0 :(得分:41)
对于使用“新建项目”向导在Visual Studio中生成的WPF独立应用程序,应用程序的入口点是在App.g.cs(生成的代码)中定义的Main函数。在默认项目中,这是public static void App.Main方法。
通常,.NET应用程序将使用名为Main的任何方法作为其入口点(称为第一个函数),该方法具有公共/静态访问修饰符 - 无论Main位于何处。
如果您的应用程序具有多个具有公共静态Main方法的类,则需要在项目属性对话框中指定入口点。在“启动对象”下拉列表中,选择包含应在启动时调用的Main方法的类。
答案 1 :(得分:26)
您的主要入口点是App.Xaml代码隐藏中的OnStartup重写:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// here you take control
}
}
其他兴趣点可能是Application.OnActivate()以及MainWindow的Loaded和Initialized事件。
如果我必须启动一些线程或服务,应该在哪里编写启动它们的代码?
取决于这些线程/服务需要和想要的内容。
答案 2 :(得分:10)
WPF应用程序的Main是自动生成的,可以在其中一个支持App.xaml文件的.cs文件中找到。您可以展开App.xaml - > App.xaml.cs - >应用 - >解决方案资源管理器中的Main()将转到App.g.i.cs源文件,该文件包含Main()函数。
此文件是自动生成的,因此我建议您在项目中创建一个包含Main()函数的新.cs文件,而不是在那里编辑Main。然后,您必须更改项目的属性以指定正确的启动对象。这是在项目属性的“应用程序”选项卡上完成的。将其设置为包含自定义主函数的类。
您可能希望将自动生成的Main的包含复制到新的包含中,因为您希望应用程序正常运行(显示主窗口等)。
答案 3 :(得分:2)
入口点通常是App.xaml.cs。
您希望避免在理想情况下放置代码。而是尝试在MVVM的视图模型中实例化它们。它通常是一个难以找到的东西 - 正如你的问题是证明的那样。
另一种方法是,在辅助类中加载它们,然后在app.xaml文件中实例化它。