. net程序与WinForm和控制台接口
本文关键字:控制台 接口 WinForm 程序 net | 更新日期: 2023-09-27 18:16:46
我有一个简单的问题,我确信它已经得到了回答,但是我似乎找不到我正在寻找的解决方案。
我的基本问题是,我在。net中创建了一个控制台应用程序,每天在任务调度程序上自动运行,但现在我的客户还想要一个基于windows窗体的界面,他们可以使用它来运行特殊的运行(他们使用GUI来指定一些参数-例如特定的日期等-使程序运行有点不同)。
我认为这样做的方式是将我的控制台应用程序转换为WinForm解决方案,并包括命令行参数,当我希望它作为默认值的原始控制台应用程序运行时,但我认为这不是正确的方式,因为它仍然涉及表单加载。
我的另一个想法是将"引擎"部分转换为DLL并制作2个可执行文件-一个是控制台应用程序,一个是winforms应用程序,但我不确定这是否正确/可能导致更多的维护。
正确的做法是什么?
我是用VB写的,但如果c#对你来说更容易的话,我同样可以使用c#解决方案。
谢谢! !
通常情况下,我会将逻辑分成一个库,然后制作一个简单的控制台应用程序和一个简单的Forms应用程序来调用库中的逻辑。
你可以分别发布它们,并按预期使用它们,而不需要重复代码。
你可以修改你的Program.cs来接受参数,然后如果一些参数已经传递给你的应用程序,处理它们并退出main,否则启动你的主窗体,像这样:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if (ProcessCommandLine(args))
return;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static bool ProcessCommandLine(string[] args)
{
//Process it, if some has been processed return true, else return false
}
}
或者您可以使表单不可见,并使用第一个选项,读取命令行。
是一种使初始表单不可见的方法。形成无形的
Reed建议的三个项目是一个正确的方法,但是如果你真的需要一个可执行文件(我们出于某种原因在一个情况下确实需要),你可以这样做:
static class Program
{
[STAThread]
static void Main(string[] args)
{
if (args[0]== "-ui")
{
System.Windows.Forms.Application.EnableVisualStyles();
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
System.Windows.Forms.Application.Run(new MyFormWork());
}
else if (args[0] == "-console")
{
Helper.AllocConsole();
DoYourConsoleWork();
Helper.FreeConsole();
}
}
public static class Helper
{
[DllImport("kernel32.dll")]
public static extern Boolean AllocConsole();
[DllImport("kernel32.dll")]
public static extern Boolean FreeConsole();
}
1:您可以使用XML作为参数。您的控制台只需要为它的参数读取XML。然后创建一个用于编辑XML和保存的表单应用程序。
的好处:你的应用程序是由任务调度程序运行的,所以你的表单不需要。对于用户来说,打开表单应用程序并更改一些内容将保存为xml
很容易Console --run every day without any notice
Argument.xml -- argument for Console .
Form -- user interface
2:你可以在一个表单中混合使用这两种方法,但它会在表单基础中每天运行,这不是一个好主意