如何将命名参数列表传递给打开的 Windows 窗体应用程序

Posted

技术标签:

【中文标题】如何将命名参数列表传递给打开的 Windows 窗体应用程序【英文标题】:How to pass named parameter list to an opening windows form application 【发布时间】:2013-04-17 02:12:23 【问题描述】:

我有一个 Windows 窗体应用程序 让我们称之为B 现在我有另一个应用程序。让我们称之为A

A 将 B 作为一个新进程启动 现在我想将命名参数列表传递给 B 并在 B 中使用它们 我该怎么做?

我的意思是示例参数列表

job:"computer engineer",age:"32",experience:"3 years"

这些参数列表也应该是可选的。有时我可能会传递 5 个参数,有时是 0

我将如何在 B 应用程序启动时读取这些参数

那么这样做的方法是什么?谢谢

c#

【问题讨论】:

【参考方案1】:

假设您使用 Process.Start 调用您的“B”进程,以下应该可以工作:

System.Diagnostics.Process.Start(string fileName, string arguments)

并且您的“B”进程主线程应该接受一个数组来容纳可能的参数,然后您可以对其进行迭代。

static void Main(string[] args)

    //your code to decipher arguments here

【讨论】:

是的,我将使用进程启动。但我怎样才能将它们读取为命名参数? 我不确定这里的最佳做法,但也许这个建议可以激发更好的响应或让您开始走上正确的道路。如果您将参数作为字符串传递(例如“job: CE”“age: 32”“exp: 3 years”),那么您可以运行一个 switch 语句来评估字符串的前三个字符以将其指向正确的方向。显然这不是最优雅的解决方案(它迫使您在与实际参数相同的字符串中硬编码 3 个字母代码),但它有可能实现您的目标。 您的 switch 语句需要进入一个循环,该循环遍历您的数组以解析每个参数。【参考方案2】:

我可以想到两种方法。

首先是使用命令行参数。如果您将进程(从命令行)称为:

your.exe -job "computer engineer" -age 32 -experience "3 years"

然后,您可以通过在进程的启动选项中设置arguments 在您的代码中复制它。然后,您必须设置您的流程来查找所有这些标志,记住它们都可以是可选的,等等。

第二个选项(这更灵活一点)是创建一个文件来保存您传递的值,并从您启动的进程中读取它。您可以制作此 XML 或直接值。

编辑:这是第一个选项的示例

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "your exe path";
startInfo.Arguments = "your argument list";
p.StartInfo = startInfo;
p.Start();

我不想告诉你如何格式化你的参数字符串;这应该由您决定。但是,我会推荐a library 使用它可能会使接收端的解析更容易一些。

【讨论】:

我将使用这个来启动:System.Diagnostics.Process.Start。你能在你的帖子中举个例子吗谢谢 @MonsterMMORPG 查看我的编辑,并查看库链接以获取解析参数的一些帮助。

以上是关于如何将命名参数列表传递给打开的 Windows 窗体应用程序的主要内容,如果未能解决你的问题,请参考以下文章

JPA 中的传递列表命名本机查询

JPA将列表传递给命名本机查询中的IN子句

如何将参数值传递给 a4j:jsFunction

如何将“=”作为参数的一部分从 Windows 的 bit-bash 传递给 .cmd 或 .bat 文件

如何将输入传递到用户定义函数中的命名列表

如何对 Windows 10 批处理文件中的参数列表进行排序