目前我在我的WPF项目中更改了我的Main方法:
public static void Main()
{
// Call Log4net configuration to configure all Appenders
log4net.Config.XmlConfigurator.Configure();
// Check if Application is already running, if it is running - Kill
if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Length > 1) System.Diagnostics.Process.GetCurrentProcess().Kill();
Controller.App app = new Controller.App();
app.InitializeComponent();
app.Run();
}
我添加了一个方法调用来配置我的Log4Net框架,并检查我的应用程序的实例是否已经运行。
以前我在MainWindow.CS文件中有这个方法 - > MainWindow构造函数。
现在我很好奇,如果在应用程序的Main方法中进行类似这两个方法调用的验证,或者它应该像以前一样在MainWindow.CS中完成,这是一种常见/好的做法。 在Main方法中是否有任何关注点。到目前为止我的应用程序一切正常。
答案 0 :(得分:1)
是的,这是完全有效的,而且我已经不止一次地看过这个。
在main中设置日志记录基础结构,可以记录运行应用程序时可能出现的任何问题,例如:如果您的App.xaml
中有错误。
此外,如果必须立即关闭WPF应用程序,则无法启动WPF应用程序,但在一般情况下不应该是一个问题。
至于你检测你的应用程序是否已经运行并停止它的方式,这是非常“原始的”。 :)
这样做的标准方法是使用全局系统互斥,如果存在,则跳转到Main
的末尾。
答案 1 :(得分:0)
我发现,通过更改Main()
而不是弄乱WPF应用程序的基础内部,而不是更好地覆盖OnStartup()
中的App.xaml.cs
方法}。
我在那里调用log4net' s Configure()
并在允许显示主窗口之前在那里执行许多其他特定于应用程序的配置操作。
我发现这可以避免构成WPF应用程序的底层布线问题,并且从长远来看可以减少问题。