我不确定如何正确地提出这个问题。所以请提前道歉。
但它主要围绕如何使用UI将现有应用程序作为没有UI的计划任务运行。
背景..
我有一个用vs2012写的winforms应用程序,有两种形式。
第一种形式是登录,直接,但目前期望用户交互他们的用户名和密码。
第二个是主要形式。当你点击“开始”按钮时,它会完成主要工作。
我想要实现它的目的是为我发送一些命令行参数,这些参数可以在没有任何ui作为计划任务的情况下运行它。
所以,我猜,我需要摆脱需要用户输入登录详细信息。并以某种方式触发“开始下载”按钮并使其不可见。
我已经研究了如何发送命令行参数,并且可以看到如何让软件在听到/沉默时做一些不同的事情但是如何隐藏表单?
我迷路了。
任何帮助都会非常感激!
答案 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());
}