如何在C#应用程序启动时正确运行代码?

11

我将一些代码放在公共的 MainWindow() {} 内部,但是一旦这样做,我就会得到一些晦涩的 XAML 解析错误(不是在我的计算机上,而是在我尝试过的其他 3 台计算机上)

是否有首选的方法在应用程序启动时立即运行代码?

理论上,我希望它能联系服务器并询问是否可以开始。如果不行,我想要应用程序关闭。把它称为临时的副本保护。


1
你在谈论哪种技术?Windows Forms?ASP.NET Web Forms?ASP.NET MVC?WPF? - balexandre
@balexandre,好问题。我的猜测/假设是WPF,因为使用的标签和提到的XAML错误以及在不同计算机上运行它。 - Lucero
1
@Lucero,我添加了wpf标签,因为涉及到XAML错误和MainWindow的讨论。 - svick
你如何称呼关闭应用程序的操作?您是否在代码逻辑中检查任何UI元素?当您将代码放置在“InitializeComponent()”调用之后时会发生什么?您遇到了什么错误?您可以通过单击错误弹出窗口上的“查看错误”来阅读InnerException。 - Tomislav Markovski
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
26

在正常情况下,WPF会为您创建应用程序的入口点Main方法。以下是您的选择:

  • 创建Application.Startup事件处理程序并将代码放在那里。或者,您可以重写OnStartup()方法。
  • 如果你觉得那个时机太晚了,你可以把你的代码放在App的无参数构造函数中(它可能不存在,但你可以创建它)。
  • 如果即使这样仍然太晚,你可以创建自己的Main()方法。有几种方法可以做到这一点。可能最简单的方法是将其放在另一个类中,并在项目属性中告诉Visual Studio您要使用此方法。

另一方面,你说你遇到了一些晦涩的XAML解析错误。也许你应该弄清楚它们具体是什么意思?


1

WPF 中有一个名为 Window.Loaded 的事件。

但是如果你想在应用程序加载之前检查运行权限(由于资源消耗或某种业务策略),请使用一个独立的小型bootstrapper可执行文件,该文件首先由mainexe启动,然后如果一切正常,bootstrapper会运行main exe


即使在窗口的构造函数之后,Window.Loaded 仍会被调用,这是提问者认为太晚的。 - svick
@svick:不明白“太晚”的意义。OP说他想在应用程序启动时就运行检查。所以,在我看来,有一个“正常”的选项是捕获Window.Loaded或使用一个引导程序,后者实现起来更复杂,但可能是OP实际想要的。 - Tigran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,