Windows窗体的计划任务代码

时间:2016-09-01 14:50:13

标签: winforms scheduled-tasks

我制作了一个Windows Form Application,效果很好。 但现在我得到了一个要求,即应用程序需要读取参数才能作为计划任务运行。

我根据说明进行了研究

Environment.GetCommandLineArgs();

我可以阅读和处理参数,这将取代用户交互,如应用程序所需的组合选择等。

我最关心的问题是你在哪里放置代码?

  • A)代码在表单中的InitializeComponent()之后。 (如果我将它用作隐藏的预定任务,我不明白form_load中的代码是否会进入)

  • B)在Application.Run之后的Program.cs中(新Form1());

  • C)任何其他地方

1 个答案:

答案 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());
    }
}

因此,如果给出了您要查找的命令行参数,则执行“计划任务”。否则,将显示用户界面。