【发布时间】:2018-10-31 10:35:38
【问题描述】:
我有一个 WPF 应用程序,它需要获取一个允许选择它必须显示的屏幕的参数。 当我在“项目右键单击-> 属性-> 调试”上使用“命令行参数”功能时,它就像一个魅力。当我发布应用程序并尝试使用 CMD 传递参数时出现问题,因为它完全被忽略了. 这是代码: App.xaml.cs 类
private void Application_Startup(object sender, StartupEventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
log.Debug("Paramerters: " + e.Args.Length);
foreach (var parameter in e.Args )
{
log.Debug("Arg " + parameter);
}
var screen = 0;
if (e.Args.Length > 0)
{
if(Int32.TryParse(e.Args[0], out screen))
{
log.Debug("Parameter: " + screen);
} else
{
log.Debug("Invalid parameter : " + e.Args[0]);
}
}
log.Debug("Screen: " + screen);
App.Current.Properties["Screen"] = screen;
log.Debug("Screens count: " + System.Windows.Forms.Screen.AllScreens.Length);
if (screen >= System.Windows.Forms.Screen.AllScreens.Length)
{
log.Debug("Error screens count: " + System.Windows.Forms.Screen.AllScreens.Length);
App.Current.Shutdown();
}
else
{
var screen1 = App.Current.Properties["Screen"];
MainWindow mainWindow = new MainWindow();
var screenBounds = System.Windows.Forms.Screen.AllScreens[screen].Bounds;
mainWindow.Left = screenBounds.Left;
mainWindow.Top = screenBounds.Top;
mainWindow.Show();
mainWindow.WindowState = WindowState.Maximized;
}
}
我错过了什么吗?我正在使用下一行来启动应用程序(它确实启动了,但参数始终是默认参数): 应用名称 1 另外,我肯定有超过 1 个屏幕。
使用日志输出进行编辑:
2018-10-31 12:42:20,366 [1] 调试应用程序 - 参数:0
2018-10-31 12:42:20,396 [1] 调试应用程序 - 屏幕:0
2018-10-31 12:42:20,401 [1] DEBUG App - 屏幕数:2
【问题讨论】:
-
不读为 0。0 是 默认值。
if (e.Args.Length == 1)表示如果有 more 多于 1 个参数,所有参数都会被忽略。至少将条件更改为>0,并添加一个记录整个事件的日志语句 -
@PanagiotisKanavos 我改变了代码,你可以看到我得到的参数(Args)的数量是 0。