C# 通过控制台运行winform应用程序

C# 通过控制台运行winform应用程序,c#,.net,winforms,C#,.net,Winforms,我有一个winforms应用程序,它从gui接收输入并运行逻辑以给出输出 我想为同一个应用程序制作一个控制台版本,其中我指定具有输入值的文件(而不是通过gui提供),然后运行winform应用程序逻辑并将输出写入文件 我的winform应用程序生成我希望使用的dll,以便我的应用程序中的任何更改也反映在控制台应用程序中 请建议我如何实现这一目标。我不知道如何继续。只需将另一个项目(控制台应用程序)添加到您的解决方案中,并将IO操作放在那里即可。逻辑保留在类库中。您不需要做额外的工作 选项1:En

我有一个winforms应用程序,它从gui接收输入并运行逻辑以给出输出

我想为同一个应用程序制作一个控制台版本,其中我指定具有输入值的文件(而不是通过gui提供),然后运行winform应用程序逻辑并将输出写入文件

我的winform应用程序生成我希望使用的dll,以便我的应用程序中的任何更改也反映在控制台应用程序中


请建议我如何实现这一目标。我不知道如何继续。

只需将另一个项目(控制台应用程序)添加到您的解决方案中,并将IO操作放在那里即可。逻辑保留在类库中。

您不需要做额外的工作

选项1:Environment.GetCommandLineArgs()

您可以简单地使用
Environment.GetCommandLineArgs()
来解析它,并根据需要使用参数

例如:

Environment.GetCommandLineArgs().ToList()
    .ForEach(x =>
    {
        MessageBox.Show(x);
    });
例如,您可以从命令行使用程序,如下所示:

  • yourProgram.exe param1“另一个param”另一个param
  • yourProgram.exe“d:\myfile.txt”
选项2:静态void Main(参数字符串[]args)

您还可以通过以下方式更改主签名:
static void main(params string[]args)
,并通过以下方式使用args:

args.ToList()
    .ForEach(x =>
    {
        MessageBox.Show(x);
    });
并以这种方式使用它:

args.ToList()
    .ForEach(x =>
    {
        MessageBox.Show(x);
    });
  • yourProgram.exe param1“另一个param”另一个param
  • yourProgram.exe“d:\myfile.txt”
注意:

  • 您还可以在调试时使用命令行参数。打开项目属性,在“调试”选项卡的“开始”选项中,输入所需的命令行参数。然后简单地运行应用程序
  • 使用Environment.GetCommandLineArgs时,第一个参数是应用程序可执行文件地址
  • 使用args时,第一个参数是您传递的参数

为什么不将它们合并?使用
args
运行
GUI
控制台
?这是不可能的。一周前,由于控制台和Winform应用程序的“态度”不同,您无法决定在应用程序启动后运行哪种类型的应用程序。您可以在Winform应用程序中创建或附加控制台,也可以在Winform中读取命令行参数,但它永远不会按预期运行。连接的控制台从不等待winform的输出,因此输出会混合到另一个命令行中。您可以
创建并连接控制台
创建winform
。那么什么不起作用呢?连接的控制台不会等待应用程序结束。Winform应用程序运行时,命令提示符可用于运行其他命令。如果您在Winform中运行Console.ReadLine(),它会开始出现异常行为—您将输入放入命令提示符。创建控制台应用程序时,标准方法是等待控制台应用程序结束,然后才能运行其他命令。我有一个从gui读取输入的对象,但我希望它从文件中读取。只需将文件地址作为参数传递:)