我制作了一个Windows Form Application,效果很好。 但现在我得到了一个要求,即应用程序需要读取参数才能作为计划任务运行。
我根据说明进行了研究
Environment.GetCommandLineArgs();
我可以阅读和处理参数,这将取代用户交互,如应用程序所需的组合选择等。
我最关心的问题是你在哪里放置代码?
A)代码在表单中的InitializeComponent()之后。 (如果我将它用作隐藏的预定任务,我不明白form_load中的代码是否会进入)
B)在Application.Run之后的Program.cs中(新Form1());
答案 0 :(得分:1)
能够作为预定任务运行
没有用户交互(因此不需要用户界面),控制台应用程序将是理想的选择。控制台应用程序的主要入口点是Program.cs
。其中,命令行参数甚至默认传递到入口点:
static void Main(string[] args)
{
// "args" contains command line arguments
}
所以我怀疑这里理想的设置是有两个单独部署的应用程序实例(一个作为Windows窗体应用程序,一个作为控制台应用程序),它们在类库中共享业务逻辑,并分别处理两个不同的用法你描述的场景。
可以这样想......当你可以为每项工作使用合适的工具时,为什么还要尝试强制使用相同的工具来完成两个截然不同的工作? (金锤传统上是坏事。)
如果确实希望将Windows窗体应用程序用作计划任务,那么它也具有相同的Program.cs
入口点。默认情况下,它通常是这样的:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
但入口点的行为是一样的。您可以简单地添加方法参数并基于该命令行输入执行逻辑。也许是这样的:
[STAThread]
static void Main(string[] args)
{
if (CheckForSomeArg(args))
{
// perform the automated tasks, pretend to be a Console Application
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
因此,如果给出了您要查找的命令行参数,则执行“计划任务”。否则,将显示用户界面。