gpt4 book ai didi

c# - 从 Windows 窗体应用程序中传递参数

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:51 24 4
gpt4 key购买 nike

我有来自简单 Windows 窗体上输入字段的数据,我想将其传回批处理文件或调用方。

  • 返回的数据本质上是复杂的。可以表示为 XML 或 JSON 负载的东西。所以数字 ExitCode 不合适。

  • 如果我将 main 方法的返回类型更改为字符串而不是 void,程序将不会调用。

  • Enviromnent args 是不可变的,因此您不能执行以下操作:


string args[] = Environment.GetCommandLineArgs();
args[1] = 'blah';

(args 0 是被调用的程序)

  • 环境变量变得很痛苦,因为它们在调用返回后不会持续存在。

这两种解决方案都可能有效,但对于一些应该在内存中应该很简单的事情来说,这似乎是极端的矫枉过正:

  • 套接字
  • 将数据写入 xml 文件,供调用者提取。

您认为应该可以返回一个字符串。有什么我想念的吗?

脚注:

(不幸的是,我不得不求助于将数据写入文件。将数据写入控制台并将控制台输出重定向到文件会在 Automation Anywhere 中产生“文件正在被另一个进程使用”消息,我试图将数据传回的 RPA 应用程序)。这就是生活! Using Automation Anywhere

最佳答案

WinForms 程序可以在标准输出流/ channel 上输出必要的数据。像这样的东西:

Console.WriteLine(outputDataString);

( Console.WriteLineConsole.Out.WriteLine 的简写)

应用程序项目也不一定需要更改为“控制台应用程序”(如这样的问题/答案所建议的:“windows form .. console.writeline() where is console?”),尽管需要注意:写入的数据不会显示在调用者的控制台中(例如,如果 WinForms 应用程序已从控制台窗口中启动),但它仍将写入标准输出流/ channel 。 (*)

例如,如果一个批处理文件应该捕获程序输出,控制台 for命令可以(ab)用于此目的。一个简化的例子:

for /f "usebackq" %%i in (`pathToYourWinFormsExecutable.exe`) do echo %%i

(如需进一步帮助根据您的需要定制它,请打开控制台窗口并键入 for /? 。这将详细说明您可以使用 for 命令执行的操作。)



(*) 自以为是的旁注:也就是说,让程序将数据写入标准输出流/ channel 可能是不常见且奇怪的行为,除非明确捕获或重定向,否则这些数据永远不会在控制台窗口中看到。根据实际使用场景以及执行此操作的程序的生命周期,实现这种“奇怪”的反直觉行为可能不是推荐的做法。如果将数据写入标准输出流/ channel 的常见、正常行为出现在所需调用方的控制台窗口中,则将项目更改为“控制台应用程序”将是更可取的方法。

关于c# - 从 Windows 窗体应用程序中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56792890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com