作为任务调度程序运行的窗口c#应用程序
本文关键字:窗口 应用程序 运行 任务调度程序 | 更新日期: 2023-09-27 18:08:43
我有一个带有一个按钮的windows应用程序,并希望它是自动的,即runas任务调度程序,而不是手动按下按钮。当我这样做的时候,我得到了这个错误。
索引超出了数组的边界。这是我的代码。
private void button1_Click(object sender, EventArgs e)
{
this.Process1();
}
public void Process1()
{
dialog = new SaveFileDialog();
dialog.Title = "Save file as...";
dialog.Filter = "XML Files (*.xml)|*.xml";
dialog.RestoreDirectory = true;
//dialog.InitialDirectory = @"v:'";
//blah blah blah...... code here..
}
p * * rogram.cs * *
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Form1 form = new Form1();
String[] arguments = Environment.GetCommandLineArgs();
if (arguments.Count() >= 1)
{
// next line shows up the error
Int16 valueArgument = Int16.Parse(arguments[1]);// <---
switch(valueArgument)
{
case 1 :
form.Process1();
break;
}
}
// ...
这在另一个有11个按钮的应用程序上工作。这里我只有一个按钮可以运行,但失败了。
如果你有一个参数,那么arguments[1]
将不存在。要获得第一个参数,请使用arguments[0]
。
正如@ActiveHigh在注释中指出的那样,第一个参数将始终是正在执行的程序的文件名(参见环境中的备注部分)。GetCommandLineArgs文档。
这意味着您没有传递命令行参数。它还建议您应该将参数计数检查更新为> 1而不是>= 1,因为该条件将始终为真。
您的程序有许多错误。我已经尽可能多地指出了-
-
Windows Form Application
不像Console Application
那样工作。对于控制台,一旦退出Main,程序就会退出。这就是现在在代码中发生的事情。对于windows窗体应用程序无限期地运行,您必须从Application.Run
获得帮助,我看到您已经注释了。 -
第二个错误是-
String[] arguments = Environment.GetCommandLineArgs();
,arguments
是一个数组,所以它没有Count()
方法。你应该使用arguments.Length
-
你必须调用
ShowDialog
来显示对话框
如果你想让某些东西工作,你至少要解决这个问题。与其使用main方法,不如将所有参数传递给form,然后在form中做任何你想做的事情-
表单-
public Form1()
{
InitializeComponent();
this.Shown += (s, e) => {
String[] arguments = Environment.GetCommandLineArgs();
if (arguments.Length > 1)
{
Int16 valueArgument = Int16.Parse(arguments[1]);
switch (valueArgument)
{
case 1:
this.Process1();
break;
}
}
};
}
private void button1_Click(object sender, EventArgs e)
{
this.Process1();
}
public void Process1()
{
var dialog = new SaveFileDialog();
dialog.Title = "Save file as...";
dialog.Filter = "XML Files (*.xml)|*.xml";
dialog.RestoreDirectory = true;
dialog.ShowDialog(this);
//dialog.InitialDirectory = @"v:'";
//blah blah blah...... code here..
}
And the Program.cs -
static class Program
{
[STAThread]
static void Main()
{
var handleCreated = new ManualResetEvent(false);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
还要注意-应用程序。Run是阻塞调用。编写的任何代码After this调用只会在被调用的表单退出后执行。