Winforms Windows窗体的计划任务代码

Winforms Windows窗体的计划任务代码,winforms,scheduled-tasks,Winforms,Scheduled Tasks,我制作了一个Windows窗体应用程序,效果非常好。 但是现在我得到了一个要求,需要应用程序读取参数才能作为计划任务运行 我做了我的研究,并遵照指示 Environment.GetCommandLineArgs(); 我可以阅读和处理参数,这将取代用户交互,如应用程序所需的组合选择等 我最大的问题是你把代码放在哪里 A) 在表单中的InitializeComponent()之后编码。(我不知道如果我将表单_load中的代码用作隐藏的计划任务,它是否会输入) B) 在Application.R

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

我做了我的研究,并遵照指示

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

我最大的问题是你把代码放在哪里

  • A) 在表单中的InitializeComponent()之后编码。(我不知道如果我将表单_load中的代码用作隐藏的计划任务,它是否会输入)

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

  • C) 其他地方吗
能够作为计划任务运行

由于没有用户交互(因此不需要用户界面),控制台应用程序将是实现这一点的理想选择。控制台应用程序的主要入口点是
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());
    }
}
但是入口点的行为是相同的。您可以简单地添加方法参数并基于该命令行输入执行逻辑。也许是这样的:

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

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

如果计划任务根本没有用户交互,那么我认为控制台应用程序比Windows窗体应用程序更合适。因此,在这种情况下,
Program.cs
似乎是合适的。虽然理想情况下,您只需部署一个单独的控制台应用程序来执行任务,但我仍然需要表单。原因计划任务将每天使用一次。。但是在白天,应用程序可以被多次使用。那么预定的任务将自动在用户面前打开,并期望他们与之交互?这当然不常见,但我想奇怪的事情发生了。但既然如此,为什么还要安排呢?为什么不让用户打开它呢?不打开并期望用户进行交互更像是场景A:用户在白天使用应用程序和处理事情。场景B:调度任务将根据参数而不是交互进行操作。谢谢。这正是我要找的。该应用程序必须由客户端进行测试,因此,如果我制作了另一个应用程序,则需要数月时间才能再次获得批准。所以这真的帮了我的忙。非常感谢。