命令行使winforms在没有UI的情况下运行

时间:2013-11-14 20:12:35

标签: c# winforms

我不确定如何正确地提出这个问题。所以请提前道歉。

但它主要围绕如何使用UI将现有应用程序作为没有UI的计划任务运行。

背景..

我有一个用vs2012写的winforms应用程序,有两种形式。

第一种形式是登录,直接,但目前期望用户交互他们的用户名和密码。

第二个是主要形式。当你点击“开始”按钮时,它会完成主要工作。

我想要实现它的目的是为我发送一些命令行参数,这些参数可以在没有任何ui作为计划任务的情况下运行它。

所以,我猜,我需要摆脱需要用户输入登录详细信息。并以某种方式触发“开始下载”按钮并使其不可见。

我已经研究了如何发送命令行参数,并且可以看到如何让软件在听到/沉默时做一些不同的事情但是如何隐藏表单?

我迷路了。

任何帮助都会非常感激!

4 个答案:

答案 0 :(得分:4)

C#仍然具有Main()功能。在标准的winforms解决方案中,它所做的只是创建Form1(或重命名的任何内容),并使用该表单启动应用程序事件队列。

例如,它应该类似于:

public static void Main()
{
     Application.Run(new Form1());
}

修改此功能。如果您看到命令行参数,请执行您必须执行的操作。如果没有,让它用表格做它的正常魔法。当你完成后,它会是这样的:

public static void Main(string[] args)
{
    if (args.Length > 0) {
        // log in
        // do all the necessary stuff
    } else {
        Application.Run(new Form1());
    }
}

答案 1 :(得分:3)

修改Main方法,该方法应该是应用程序的入口点。如果有任何参数,您不需要实例化并显示任何表单,只需运行代码即可在没有UI的情况下完成工作。

    [STAThread]
    static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            // silent mode - you don't need to instantiate any forms
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

答案 2 :(得分:2)

在解决方案中找到静态Main方法。在该方法中,您将拥有Application.Run(new Form())或(form.Show()或ShowDialog())。所以他们的关键是传递一个参数,告诉你现在调用这个方法(在窗体上显示方法)

关键是让您的业务逻辑在一个独立于您的类的类中,并在您希望拥有GUI或需要计划任务时使用此类

答案 3 :(得分:1)

我在前一天回答了这个问题 - on this question

注意代码块之间的区别 - 第一个块是无形的,第二个块是标准的。

  if (ABCFile > 0)
  {
    var me = new MainForm(); // instantiate the form
    me.NoGui(ABCFile); // call the alternate entry point
    Environment.Exit(0);
  }
  else
  {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
  }