目标:想在WinForm程序之间传递参数。以便子进程作出相应的处理。

一种错误的方法

父进程的主程序:

             ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "ProcessChild.exe";
psi.Arguments = txtArgs.Text;
Process.Start(psi);//主要问题在这里

子进程的主程序:

txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;

结果如图:

根本就传不过来的,错误的原因在于:想当然的认为父进程的ProcessStartInfo这个类的实例的成员Arguments传递到子进程中去了。其实Process.Start()返回一个Process类型的对象,数据在返回的对象中保存着,并没有跨进程传递。

两种正确的方法

第一种:

  从Main(string []args)接收传入的数据。这里要修改子进程的Main方法如下:

         static void Main(string []args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmChild());
}

因为默认是没有参数的。保存args里面的字符串,值得一提的是:args总是有至少一个元素,第二种方法方便看到。

第二种:使用Environment类的方法。

             string[] args = Environment.GetCommandLineArgs();
//txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;
txtArgs.Text = args[] + "\r\n";

当不从父进程启动时,结果如下:args的元素个数是1或者更多,第0个是固定的.

当从父进程启动时,父进行传递的参数成为args的第二个元素:子进程中代码

             string[] args = Environment.GetCommandLineArgs();
//txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;
txtArgs.Text += args[] + "\r\n";
if (args.Length > )
{
txtArgs.Text += args[];
}

  还有一个地方需要注意:那就是当父程序传递参数时,如果传递来的字符串内有空格的话,那会被当成参数的分界,像下面这样:

 ///////////////////////////////////父程序///////////////////////
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\Documents and Settings\Administrator\桌面\ProcessArgs\ProcessChild\bin\Debug\ProcessChild.exe";
psi.Arguments = txtArgs.Text;
Process.Start(psi);//主要问题在这里
//
///////////////////////////////////子程序///////////////////////
string[] args = Environment.GetCommandLineArgs();
txtArgs.Text += "第0个参数" + args[]+"\r\n";
int i = ;
MessageBox.Show(args.Length.ToString());
if (args.Length > )//看子程序是怎么接收数据的
{
while (i < args.Length)
{
txtArgs.Text += "第"+i+"个参数:"+args[i]+"\r\n ";
i++;
}
}
txtArgs.Text += "传递过来的参数个数是:"+args.Length.ToString();
//结果:
第0个参数C:\Documents and Settings\Administrator\桌面\ProcessArgs\ProcessChild\bin\Debug\ProcessChild.exe
第1个参数:这是从父进行传递来的参数
第2个参数:空格1
第3个参数:空格2
传递过来的参数个数是:

在父程序传递数据如图:

子程序接收到情况如下:

找到原因的地址:  http://stackoverflow.com/questions/10682212/how-to-pass-argument-to-a-process

记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)的更多相关文章

  1. 在Winform程序中设置管理员权限及为用户组添加写入权限

    在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...

  2. (转)在Winform程序中设置管理员权限及为用户组添加写入权限

    本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...

  3. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  4. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...

  5. 在C#中winform程序中应用nlog日志工具

    在C#中winform程序中应用nlog日志工具,配置文件简单应用. 文件名 nlog.config,请注意修改属性为"始终复制",发布时候容易遇到不存在文件的错误提示. 通过Nu ...

  6. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  7. 在Winform程序中使用Spire.Pdf实现页面添加印章处理

    在一些场合,我们往往需要使用印章来给每页文档加盖一个印章,以表示该文档经过某个部门的认证的,常规的做法就是打印文档后盖章,如果需要电子档再行扫描一下.这样的的处理,如果文档很多,且仅仅需要电子文档的就 ...

  8. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  9. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

随机推荐

  1. linux的七大运行级别及级别修改

    运行级别     级别说明 0           所有进程将被终止,机器将有序的停止,关机时系统处于这个运行级别 1           单用户模式,用于系统维护,只有少数进程运行,同时所有服务也不 ...

  2. CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装

    每次搭建新服务器,都要来来回回把这些包再装一下,来来回回搞了不下20遍了吧,原来都是凭经验,配置过程中重复入坑是难免的,故写此文做个备忘.虽然有像xampp这样的集成包,但是在生产环境的Linux发行 ...

  3. [转][iOS]NSHash​Table & NSMap​Table

    NSSet and NSDictionary, along with NSArray are the workhorse collection classes of Foundation. Unlik ...

  4. Duplicate entry 'javajavajav' for key 'username'

    org.apache.ibatis.exceptions.PersistenceException: ### Error updating database.  Cause: com.mysql.jd ...

  5. svn cleanup 执行失败时,可以勾选 break locks,

  6. [LeetCode] Minimum Depth of Binary Tree 二叉树的最小深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  7. [LeetCode] Minimum Path Sum 最小路径和

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  8. mysql-5.7.11-winx64.zip 安装配置

    1.下载 http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.11-winx64.zip 2.解压缩zip包: D:\Program Files\m ...

  9. Python中用format函数格式化字符串

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 语法:%[( ...

  10. 【URAL 1519】Formula 1

    http://acm.timus.ru/problem.aspx?space=1&num=1519 调了好久啊.参考(抄)的iwtwiioi的题解. 如果想要题解,题解在<基于连通性状态 ...