. net程序与WinForm和控制台接口

本文关键字:控制台 接口 WinForm 程序 net | 更新日期: 2023-09-27 18:16:46

我有一个简单的问题,我确信它已经得到了回答,但是我似乎找不到我正在寻找的解决方案。

我的基本问题是,我在。net中创建了一个控制台应用程序,每天在任务调度程序上自动运行,但现在我的客户还想要一个基于windows窗体的界面,他们可以使用它来运行特殊的运行(他们使用GUI来指定一些参数-例如特定的日期等-使程序运行有点不同)。

我认为这样做的方式是将我的控制台应用程序转换为WinForm解决方案,并包括命令行参数,当我希望它作为默认值的原始控制台应用程序运行时,但我认为这不是正确的方式,因为它仍然涉及表单加载。

我的另一个想法是将"引擎"部分转换为DLL并制作2个可执行文件-一个是控制台应用程序,一个是winforms应用程序,但我不确定这是否正确/可能导致更多的维护。

正确的做法是什么?

我是用VB写的,但如果c#对你来说更容易的话,我同样可以使用c#解决方案。

谢谢! !

. net程序与WinForm和控制台接口

通常情况下,我会将逻辑分成一个库,然后制作一个简单的控制台应用程序一个简单的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:你可以在一个表单中混合使用这两种方法,但它会在表单基础中每天运行,这不是一个好主意